2009-11-13 6 views
1

C# Присвоение значения DataRow ["haswhatnots"] = hasWhatnots ужасно медленно. hasWhatnots - это логическое значение.C# Присвоение значения DataRow ["haswhatnots"] = hasWhatnots ужасно медленно

Я профилировал эту линию и с 560000 ударами время выполнения составляет 82 секунды. Конечно, профилировщик влияет на производительность, но все же производительность этого очень медленная!

Любые намеки на проблему. DataRow является частью DataTable, которая привязана к BindingSource, привязанному к DataGridView.Datasource.

ответ

2

(редактирование: только что увидели, что вы привязываете данные) Первое, что нужно попробовать - отключить привязку данных; возможно, установить источник в null и повторно связать впоследствии. BindingSource имеет SuspendBinding(), ResumeBinding() и ResetBindings() для этого.


Если реальная проблема просто поиск, вы можете взять оснастку из DataColumn и использования:

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

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

Кажется, я припоминаю, что это самый быстрый маршрут (перегрузка строка локализует DataColumn из списка).

В качестве альтернативы - использовать class модель вместо DataTable ;-p

0

Вы могли бы попробовать это

bindingSource1.RaiseListChangedEvents = false; 

// stuff the grid 

bindingSource1.RaiseListChangedEvents = true; 

и посмотреть, если это делает разницу.

0

Очень поздно, но все еще была такая же проблема

DataRow row 

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

Существовали крайние лаги, протекающие на (в моем масштабе) больших сетках (60 COLS, 10k + строки), и это вырезанные время центрального процессора менее то один процент к тому, чем он был раньше.