IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Capacité d'un objet générique List<>


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 256
    Par défaut Capacité d'un objet générique List<>
    Bonjour,

    J'admet que le titre de mon sujet n'est pas trés explicite mais je n'ai pas trouvé autre chose.
    En fait, je voudrais savoir si il est raisonnable de stocker la liste des fichiers à copier dans un objet List<string> pour ensuite les copier ?
    Le nombre de fichiers dépendra du client qui exécutera le programme, on peut avoir 50000 fichiers comme 500000 voir +. Je ne voudrais pas que les ressources mémoire gonflent inoxérablement. Je pensais à une ressource externe allant d'un simple .txt jusqu'à une base de données sql.

    Quelle est la meilleure stratégie surtout en terme de performance ? Je tiens vraiment à stocker le path des fichiers à copier.

    Merci.

  2. #2
    Membre actif Avatar de ToshiroSama
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 77
    Par défaut
    Une liste je veux bien mais la persistance elle est ou ?

    500'000 accès disque pour écrire sur un fichier txt ... Bonjour les perf.

    j'aurais utilisé un model de donnée, dbml,edmx.. ajouter mes lignes, et faire tout le traitement et puis a la fin, un commit des modifications. je crois qu'au niveau performance çà serait plus propre.

    Model.ADDToMaTable(... x 500 000 + model.SaveChanges() [ par ex ] serait plus rapide que 500 000 écriture sur un fichier texte ou encore par rapport à 500 000 "insert".

    Cela dit, ça m'accroche aussi, si il y'a d'autre solutions, je suis preneur.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Et pourquoi ne pas copier les fichiers un par un ?

    Pour que ton utilisateur les choisissent, ils sont bien affichés quelque part ?
    Donc, un par un, tu parcours les objets affichés et tu le copies.

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    tu peux mettre autant de choses que tu veux dans un list<T>
    enfin dans la limite d'un int32 (2 milliards environ)

    et donc pour chaque élément que tu mets dedans ca va prendre 4 octets en mémoire (en plus de ce que tu mets dedans)
    donc si tu mets 500 000 string, le list prendra 2Mo

    après pour un string, peu importe dans quoi tu le stocks il prendra 2 octets par caractère

    à l'instanciation tu peux spécifier la capacité prévue (genre 512 par défaut)
    quand tu ajoutes un élément et que ca dépasse la capacité max, la liste est ré allouée dans un autre espace mémoire et la capacité est doublée (rien de bien grave, mais tant qu'à faire mettre une limite assez grosse ou bien évaluée)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 256
    Par défaut
    Citation Envoyé par ToshiroSama Voir le message
    Une liste je veux bien mais la persistance elle est ou ?

    500'000 accès disque pour écrire sur un fichier txt ... Bonjour les perf.

    j'aurais utilisé un model de donnée, dbml,edmx.. ajouter mes lignes, et faire tout le traitement et puis a la fin, un commit des modifications. je crois qu'au niveau performance çà serait plus propre.

    Model.ADDToMaTable(... x 500 000 + model.SaveChanges() [ par ex ] serait plus rapide que 500 000 écriture sur un fichier texte ou encore par rapport à 500 000 "insert".

    Cela dit, ça m'accroche aussi, si il y'a d'autre solutions, je suis preneur.
    Je ne cherche pas la persistance des données, je recrée la liste à chaque nouvelle copie.

    PRINCIPE ACTUEL DU PROGRAMME :

    Donc lors de l'analyze des fichiers que je fait à chaque nouvelle copie, je calcule le nombre de fichiers, la taille, je ne prends que les fichiers qui ont le bit d'archivage activé. C'est pendant cette analyse que je dois stocker les fichiers pour aprés les copier.

    Je veux absolument stocker les fichiers car je m'appuierai dessus pour savoir quel fichier copier vu que le bit d'archivage est remis à zéro aprés chaque copie d'un fichier.

  6. #6
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Si tu es en framework .NET 4 alors utilise plutôt plutôt les ListParallel dans l'espace System.Collection.Parallel car c'est plus performant que les List.

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    jamais essayé les listparallel (que google ne connait pas avec cet orthographe d'ailleurs), mais si ca multithread les actions, avec la copie de fichiers c'est une mauvaise idée

    m'enfin à mon avis le débat est clos
    une list<T> de string ou meme d'une classe avec d'autres infos ne pose pas de soucis
    nous en as plein avec toutes des 10aines de milliers d'instances dedans
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    jamais essayé les listparallel (que google ne connait pas avec cet orthographe d'ailleurs), mais si ca multithread les actions, avec la copie de fichiers c'est une mauvaise idée
    Ce n'est pas listparallel..regarde plutôt dans l'espace System.Collection.Parallel. Et pourquoi c'est une mauvaise idée de paralléliser des copies de fichiers c'est très courant pour ne pas dire un cas d'école. Puis en terme de performance si tu as 500000 fichiers il faut obligatoirement passer par le threading pour gagner en performance car 1 seul thread il va avoir du mal.

    Citation Envoyé par Pol63 Voir le message
    m'enfin à mon avis le débat est clos
    une list<T> de string ou meme d'une classe avec d'autres infos ne pose pas de soucis
    nous en as plein avec toutes des 10aines de milliers d'instances dedans
    A mon avis le débat est clos lorsque le sujet est tagué résolu

    Le problème avec les List<T> c'est qu'elles ne sont pas optimisées pour des architectures multiprocesseurs ou multicores que les List du .NET 4 c'est une évidence

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Délégué] Traitement sur liste d'objets génériques
    Par Chen norris dans le forum XNA/Monogame
    Réponses: 1
    Dernier message: 26/03/2013, 11h44
  2. Convertire un Objet on List
    Par mouvma dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 20/08/2007, 09h35
  3. Réponses: 2
    Dernier message: 20/04/2007, 01h09
  4. [Générique] List de couple
    Par anthyme dans le forum C#
    Réponses: 2
    Dernier message: 01/03/2007, 15h29
  5. taille d'objet générique
    Par Heimdall dans le forum C
    Réponses: 7
    Dernier message: 01/07/2004, 18h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo