2009-11-13 15 views
1

C# Affectation d'une valeur à DataRow [ "haswhatnots"] = hasWhatnots est terrible lent. hasWhatnots est une valeur booléenne.C# Affectation d'une valeur à DataRow [ "haswhatnots"] = hasWhatnots est lent terrible

Je profilé avec cette ligne et 560000 frappe le temps d'exécution est de 82 secondes. Bien sûr, le profileur a un effet sur la performance, mais encore les performances de c'est grazy lent!

Tous les conseils sur la question. Le DataRow fait partie d'un DataTable qui est lié à BindingSource qui est lié à DataGridView.Datasource.

Répondre

2

(edit: juste vu que vous êtes lié aux données) La première chose à essayer est de désactiver la liaison de données; peut-être définir la source à null et re-bind après. BindingSource a SuspendBinding(), ResumeBinding() et ResetBindings() pour cela.


Si le problème réel est lookup juste, vous pouvez prendre un claquement de DataColumn, et l'utilisation:

// early code, once only... 
DataColumn col = table.Columns["haswhatnots"]; 

// "real" code, perhaps in a loop 
row[col] = hasWhatnots; 

me semble me rappeler que c'est la voie la plus rapide (la surcharge de chaîne localise la DataColumn de la liste).

Vous pouvez également - utiliser un modèle class au lieu de DataTable ;-P

0

Vous pouvez essayer cette

bindingSource1.RaiseListChangedEvents = false; 

// stuff the grid 

bindingSource1.RaiseListChangedEvents = true; 

et voir si cela fait une différence.

0

Très en retard, mais encore eu le même problème

DataRow row 

row.BeginEdit(); 
row["haswhatnots"] = hasWhatnots; 
row.EndEdit(); 

subit des retards extrêmes, se produisant sur (à mon échelle) de grandes grilles (60 cols, 10k + lignes), et ce cutted le temps cpu à moins puis un pour cent à ce qu'il était avant.