C# 为 DataRow["haswhatnots"] = hasWhatnots 赋值非常慢。hasWhatnots 是一个布尔值。
我已经分析了这条线,点击 560000 次,执行时间为 82 秒。当然 profiler 对性能有一些影响,但是这个性能还是很慢!
关于这个问题的任何提示。DataRow 是绑定到绑定到 DataGridView.Datasource 的 BindingSource 的 DataTable 的一部分。
(编辑:只看到你是数据绑定)首先要尝试的是禁用数据绑定;也许将源设置为 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
你可以试试这个
bindingSource1.RaiseListChangedEvents = false;
// stuff the grid
bindingSource1.RaiseListChangedEvents = true;
看看它是否有所作为。
很晚了,但仍然有同样的问题
DataRow row
row.BeginEdit();
row["haswhatnots"] = hasWhatnots;
row.EndEdit();
在(以我的规模)大型网格(60 列,10k+ 行)上发生了极端滞后,这将 cpu 时间减少到不到以前的百分之一。