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

 .NET Discussion :

Pb de performance avec une liste


Sujet :

.NET

  1. #1
    Nouveau membre du Club

    Inscrit en
    Octobre 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 33
    Points : 36
    Points
    36
    Par défaut Pb de performance avec une liste
    Bonjour,

    Pour gérer une liste triée, j'ai utilisé le type List .
    Cette liste est grande et je fais pas mal d'opérations dessus, voulant optimiser mon code, j'ai utilisé l'assistant de performance avec instrumentation.
    J'ai trouvé que mes appels à la méthode InsertRange étaient très gourmands en temps, d'ailleurs en consultant la documentation :
    "Cette méthode est un O (n + m) opération, où n est le nombre d’éléments à ajouter et m est Count."
    Comme m est grand dans mon cas, il est logique que les performances baissent.

    Il va être difficile d'améliorer l’algorithme (j'ai des idées, mais il va falloir tout refaire pour un résultat non garanti), par contre je n'ai pas beaucoup d'expérience avec les types de données du framework .net, donc peut-être ai-je mal choisi mon type ?
    Existe-t-il d'autres types de données qui supportent mieux l'insertion de plusieurs éléments en leur sein ? (par exemple pour une liste chaînée, le coût d'insertion ne dépend pas de la taille de la liste, mais je ne crois pas qu'il y ai un type liste chainée dans le framework)

    Pierre

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    oui il y a plein de types de collection en fonction de ce qu'on veut faire avec

    par contre insertrange c'est pour modifier l'ordre, addrange (ajout à la fin) est surement plus performant, as tu réellement besoin de insertrange ?

    après le List contient un tableau avec une capacité par défaut, et quand on dépasse la capacité, le tableau est recopié dans un tableau 2x plus grand et cette opération est un peu gourmange
    il est possible de définir la capacité de départ à l'instanciation

    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    dim l as new List(of machin)(500)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var l = new List<machin>(500);
    sinon quel est le besoin de ta list ? si c'est juste du stockage le List est ce qu'il y a de mieux (et il permet le tri après coup avec .sort)
    si c'est de l'empilage il y a queue (fifo) et stack (lifo)
    si c'est du tri le sortedlist devrait convenir
    si c'est de l'indexation le dictionary est très performant
    (et y en a d'autres mais que j'utilise pas souvent)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    A la liste fournie par Pol63 il manque LinkedList, qui représente une liste doublement chaînée. Ce type de liste est très performant pour les opérations d'insertion/suppression avant/après un élément, ou pour accéder à l'élément précédent/suivant d'un élément donné (en O(1)).

    Par contre, les performances en accès direct au ième élément sont en O(i)
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

Discussions similaires

  1. [MySQL] Problème avec une liste déroulante
    Par leloup84 dans le forum SQL Procédural
    Réponses: 19
    Dernier message: 24/01/2006, 12h57
  2. Réponses: 7
    Dernier message: 24/01/2006, 11h03
  3. alligner des textbox (input) avec une liste
    Par sundjata dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 20/01/2006, 15h16
  4. Remplir 3 champs textes différents avec une liste déroulante
    Par azorol dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/12/2005, 00h04
  5. Réponses: 14
    Dernier message: 09/08/2004, 13h42

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