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

Framework .NET Discussion :

Eviter de copier une liste (mémoire)


Sujet :

Framework .NET

  1. #1
    Membre expérimenté Avatar de dfiad77pro
    Homme Profil pro
    Responsable Architecture logicielle
    Inscrit en
    Décembre 2008
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Architecture logicielle
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 541
    Points : 1 729
    Points
    1 729
    Par défaut Eviter de copier une liste (mémoire)
    Bonjour,

    j'ai une petite question sur les listes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     List<CHEMIN> chem = from da in db.CHEMIN... // liste de 10 000 éléments
     
    //list1 à binder
     List<CHEMIN> l1 =( from da in chem where...).ToList(); // liste de 5000 éléments
     List<CHEMIN> l2 =( from da in chem where...).ToList();   // liste de 5000 éléments
    Le soucis est que l1 et l2 contiennent les données de la liste global "chem" ce qui créer une copie inutile.
    y'a t-il un moyen de binder une liste filtrée sans la dupliquer et sans supprimer la liste source?


    cordialement

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Tu peux faire directement quelque chose de ce genre :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    List<CHEMIN> chem = from da in db.CHEMIN... // liste de 10 000 éléments
     
    TonControl1.DataSource = (from da in chem where...).ToList(); // liste de 5000 éléments
    TonControl2.DataSource = (from da in chem where...).ToList(); // liste de 5000 éléments
    Tu n'es même pas obligé d'appeler la méthode ToList lors du binding, le control devrait savoir se débrouiller avec un IEnumerable<> ou autre type du genre...
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par dfiad77pro Voir le message
    Bonjour,

    j'ai une petite question sur les listes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     List<CHEMIN> chem = from da in db.CHEMIN... // liste de 10 000 éléments
     
    //list1 à binder
     List<CHEMIN> l1 =( from da in chem where...).ToList(); // liste de 5000 éléments
     List<CHEMIN> l2 =( from da in chem where...).ToList();   // liste de 5000 éléments
    Le soucis est que l1 et l2 contiennent les données de la liste global "chem" ce qui créer une copie inutile.
    y'a t-il un moyen de binder une liste filtrée sans la dupliquer et sans supprimer la liste source?


    cordialement
    Petite question, pourquoi serait il grave de dupliquer la liste ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    Petite question, pourquoi serait il grave de dupliquer la liste ?
    Effectivement c'est ce que je me demandais aussi... à moins que CHEMIN soit un type valeur (ce qui est peu probable vu que c'est une entité), c'est juste les références qui sont copiées. 10000 éléments * 4 octets (8 octets en x64), ça fait moins de 40 Ko (80 Ko en x64) ; c'est pas avec ça que tu vas faire exploser la mémoire de ton application

  5. #5
    Membre expérimenté Avatar de dfiad77pro
    Homme Profil pro
    Responsable Architecture logicielle
    Inscrit en
    Décembre 2008
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Architecture logicielle
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 541
    Points : 1 729
    Points
    1 729
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Tu peux faire directement quelque chose de ce genre :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    List<CHEMIN> chem = from da in db.CHEMIN... // liste de 10 000 éléments
     
    TonControl1.DataSource = (from da in chem where...).ToList(); // liste de 5000 éléments
    TonControl2.DataSource = (from da in chem where...).ToList(); // liste de 5000 éléments
    Tu n'es même pas obligé d'appeler la méthode ToList lors du binding, le control devrait savoir se débrouiller avec un IEnumerable<> ou autre type du genre...
    En fait je suis en Winforms donc avec entitie 5 ça merde avec le Tolist

  6. #6
    Membre expérimenté Avatar de dfiad77pro
    Homme Profil pro
    Responsable Architecture logicielle
    Inscrit en
    Décembre 2008
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Architecture logicielle
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 541
    Points : 1 729
    Points
    1 729
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Effectivement c'est ce que je me demandais aussi... à moins que CHEMIN soit un type valeur (ce qui est peu probable vu que c'est une entité), c'est juste les références qui sont copiées. 10000 éléments * 4 octets (8 octets en x64), ça fait moins de 40 Ko (80 Ko en x64) ; c'est pas avec ça que tu vas faire exploser la mémoire de ton application
    Ah je croyais que ça copiait l'objet avec le Tolist();

    Disons que c'est une appli qui comporte un modéle de 10000 éléments avec 70 colonnes et qui généré 500 000 cellules tarifaire, donc l'optimisation est de rigeur,

    Actuellement ça me prend 3 seconde à tout calculer, ce qui est raisonnable, mais j'aime bien optimiser car on monte a 230 mega ( cellules chargées dans des ultragrids d'infragitics)


    230 mega comprend aussi une cartographie que j'ai faite en WPF ( donc on charge winforms +WPF)

  7. #7
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Comme le dit Thomas, tu as beau dupliqué les listes, les éléments CHEMIN n'existent qu'une seule fois
    Ce sont les structures qui pointent dessus qui sont copiés donc c'est déjà pas mal.

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Points : 674
    Points
    674
    Par défaut
    Est-il nécessaire de tout charger au départ?
    Il serait intéressant de virtualiser tes données. Apparemment il y a cette fonctionnalité avec l'ultragrid.

  9. #9
    Membre expérimenté Avatar de dfiad77pro
    Homme Profil pro
    Responsable Architecture logicielle
    Inscrit en
    Décembre 2008
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Architecture logicielle
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 541
    Points : 1 729
    Points
    1 729
    Par défaut
    Citation Envoyé par chrisdot Voir le message
    Est-il nécessaire de tout charger au départ?
    Il serait intéressant de virtualiser tes données. Apparemment il y a cette fonctionnalité avec l'ultragrid.
    Oui j'utilise déjà le Load On demand

  10. #10
    Membre expérimenté Avatar de dfiad77pro
    Homme Profil pro
    Responsable Architecture logicielle
    Inscrit en
    Décembre 2008
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Architecture logicielle
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 541
    Points : 1 729
    Points
    1 729
    Par défaut
    Tomlev toujours aussi efficace depuis le temps

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

Discussions similaires

  1. Copier une liste d'un site vers un autre
    Par LefortLudovic dans le forum SharePoint
    Réponses: 4
    Dernier message: 06/09/2007, 14h52
  2. Réponses: 2
    Dernier message: 21/05/2007, 20h43
  3. Eviter doublon dans une liste déroulante
    Par Joachim49 dans le forum Excel
    Réponses: 4
    Dernier message: 21/05/2007, 12h07
  4. Copier une bloc mémoire dans un CDC
    Par kinhelios dans le forum MFC
    Réponses: 3
    Dernier message: 23/02/2007, 09h17
  5. Copier une liste dans une autre
    Par chris3544 dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 28/12/2006, 13h18

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