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 :

Optimiser une insertion en masse dans une DataRowCollection


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de obitskater
    Profil pro
    Développeur .NET
    Inscrit en
    Février 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2008
    Messages : 163
    Par défaut Optimiser une insertion en masse dans une DataRowCollection
    Bonjour à tous,

    J'ai un objet contenant une DataRowCollection nommé Rows.
    J'ai un problème de performance lorsque j'ai un très gros nombre de ligne à insérer dans cet objet (60000).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
     
    //DataGridView améliorée
    public class MaGrille
    {
     
    //........
     
    public void BindWithDataTable(DataTable maTable)
    {
    DataRow row;
    foreach(DataRow rowSource in maTable.Rows)
    {
        //obtient une ligne au format de la grille
        row = this.NewRow();
        //n'insère que des lignes vides pour le moment
        this.Rows.Add(row);
    }
    }
     
    //........
     
    }
    J'ai pu me rendre compte en mettant une trace dès que 500 nouvelles lignes ont été ajoutées, que plus on est loin dans la boucle, plus l'intervalle de temps est grand pour insérer 500 nouvelles lignes. Je pense donc que le problème de performance vient du fait que la DataRowCollection recopie à chaque fois toutes ses entrées (DataRow) pour agrandir sa taille.

    C'est pourquoi je cherche un moyen de définir la taille de ma DataRowCollection avant d'y insérer des lignes (que je connaît avant évidemment). Une sorte de Redim Preverse mais en C# et pour une DataRowCollection.

    Si vous avez des pistes je suis preneur. Merci d'avance

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    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 198
    Par défaut
    utilise une collection plus simple plutot que cette classe plus complexe
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut

    A quoi sert ce DataRowCollection ?
    Je me demande si passer par un dataview ne serait pas plus efficace ?

  4. #4
    Membre confirmé Avatar de obitskater
    Profil pro
    Développeur .NET
    Inscrit en
    Février 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2008
    Messages : 163
    Par défaut
    En fait ma grille en question s'agit d'une grille d'un éditeur tiers : la TrueDbGrid de Component One.
    Et cette DataRowCollection est une de ses propriétés, que je ne peux donc pas changer, et que je suis obligé d'utiliser pour manipuler ses lignes.

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Quelle misére !

    Mais tu veux dire que ce TrueDbGrid n'accepte pas d'autre datasource qu'un DataRowCollection que tu dois lui preparer a la main ?

    Je connaissais ce TrueDbGrid en 1998 sous VisusalStudio 6 je crois ...

    Depuis .NET 2.0 je trouve que le DataGridView et largement plus simple a utiliser en plus tu peux lui mettre comme datasource la pluspart des collections que tu veux

    DataTable, DataView, List, etc..

  6. #6
    Membre confirmé Avatar de obitskater
    Profil pro
    Développeur .NET
    Inscrit en
    Février 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2008
    Messages : 163
    Par défaut
    Si, ce contrôle accepte un grand nombre de dataSource, mais les contraintes du projet font que je ne peux passer par de DataSource, et que je dois garder la grille dans un état unbound.

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

Discussions similaires

  1. Insert en masse dans une table avec Hibernate
    Par goomie dans le forum Hibernate
    Réponses: 2
    Dernier message: 08/05/2011, 23h47
  2. Réponses: 1
    Dernier message: 26/12/2010, 21h20
  3. [ASE12.5]Insertion en masse dans une table
    Par jfmerveille dans le forum Adaptive Server Enterprise
    Réponses: 6
    Dernier message: 03/12/2007, 15h14
  4. Insertion en masse dans une table
    Par scheu dans le forum Administration
    Réponses: 5
    Dernier message: 04/10/2007, 17h33
  5. Réponses: 4
    Dernier message: 09/07/2007, 12h03

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