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 :

Dataset : Delete Row hyper lent


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Par défaut Dataset : Delete Row hyper lent
    Bonjour à tous,

    J’ai un gros problème de lenteur lors de la suppression (delete) de Row dans une DataTable.

    Voici ma DataTable :


    Voici le code utilisé :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                foreach (myDataSet.LOT_NATURERow row in _ds.LOT_NATURE.Rows)
                {
                    row.Delete();
                }

    La datatable ne comporte de pas de liaison Delete on Cascade.

    Admettons qu’elle comporte 5000 rows : la boucle prend 150 secondes.
    Je ne comprends pas. Je ne sais pas d’où ça vient. J'ai essayé des SuspendBinding, EndEdit sur les BindingSource... Toutes les autres tables se vident aisément en 1 seconde…

    Voilà, si quelqu’un voit l’ombre d’une idée.

  2. #2
    Modérateur
    Avatar de Overcrash
    Homme Profil pro
    Architecte Logiciel et responsable CRM (Salesforce)
    Inscrit en
    Mai 2008
    Messages
    1 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte Logiciel et responsable CRM (Salesforce)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 254
    Par défaut
    Bonsoir,

    C'est uniquement la boucle qui prend 150sec ? ou l’exécution total ?
    ---
    Overcrash

    Je ne lis pas les codes qui ne sont pas indentés.
    Merci de les messages utiles en cliquant en bas à droite du message

    Bloqué par le firewall pour accéder au chat ? Essayez avec l'adresse en direct : http://87.98.168.209/

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Par défaut
    C'est l'ensemble des tours de boucle : delete de 5000 rows en 150 secondes

    Contrairement à d'autres DataTables sur lesquelles je vais en supprimer 5000 en 1 seconde.

    Pour l'instant la solution peu élégante que j'ai trouvé est de supprimer celles-ci dans la base (SqlCommand) et de recharger les données de mes DataTables...

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 123
    Par défaut suppression ? pourquoi ?
    Bonjour,

    La suppression des tables, c'est pour faire quoi ?
    si c'est pour une suppression suite au désir de l'utilisateur de tout supprimer, c'est pas grave. En revanche, je doute que ce soit pour tout supprimer.
    Il y a dans DataSet plusieurs méthodes telles que Merge ou RejectChanges.
    Lisez la documentation sur Merge (ici) et tout particulièrement le passage avec DataRowState.

  5. #5
    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
    essaye de copier le contenu de la collection rows dans un list<T> puis fait le for each sur le list pour faire le delete
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 123
    Par défaut delete
    ce que dit Pol63 est vrai,
    le foreach sur un Rows et dans la row supprimer l'élément ?
    il faut qu'il recommence tout le processus.
    Le mieux ce serait d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    while(rows.Count >0)
      rows[0].Delete();

Discussions similaires

  1. Line.2D hyper lent, comment dessiner plus vite ?
    Par alexandre1975 dans le forum 2D
    Réponses: 17
    Dernier message: 25/06/2008, 00h00
  2. dataset add row ne pas ajouter de clé double?
    Par gregcat dans le forum Windows Forms
    Réponses: 2
    Dernier message: 30/01/2008, 11h25
  3. [opensuse 10.3] Interface graphique hyper lente
    Par MDev25 dans le forum Administration système
    Réponses: 0
    Dernier message: 25/01/2008, 10h53
  4. delete row de ma base
    Par anisj1m dans le forum JDBC
    Réponses: 7
    Dernier message: 20/03/2007, 15h00
  5. [C# 2.0] DataGridView add/delete row ?
    Par fix105 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 30/11/2006, 16h52

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