【发布时间】:2018-02-08 09:42:20
【问题描述】:
我正在评估 Infragistics 提供的 XamDataGrid 的性能。特别是,我专注于在 100 万条记录的表中以编程方式选择 500k 条记录。为此,我目前正在执行以下操作:
Stopwatch s = new Stopwatch();
var recordsToSelect = new List<DataRecord>(500000);
s.Start();
foreach (DataRecord rec in ODataGrid.Records)
{
if (rec.Index % 2 == 0)
recordsToSelect.Add(rec);
}
s.Stop();
Console.WriteLine(s.Elapsed);
s.Restart();
ODataGrid.SelectedItems.Records.AddRange(recordsToSelect.ToArray(), false, true);
s.Stop();
Console.WriteLine(s.Elapsed);
结果如下:
00:00:14.3122651 for the loop
00:00:00.8765741 to apply the selection
问题显然是循环。我想知道,因为我将 DataTable 绑定为项目源,并且由于 DataTable 上的循环比 XamDataGrid.Records 上的循环快 10 倍,因此有一种方法可以转换 DataRecord 中的 DataRow,或者是否有更快的达到我之前公开的功能目标的方法
编辑:
我能够提高性能:
Stopwatch s = new Stopwatch();
var recordsToSelect = new List<DataRow>(500000);
s.Start();
int i = 0;
foreach (DataRow rec in d.Rows)
{
if (i % 2 == 0)
recordsToSelect.Add(rec);
i++;
}
s.Stop();
Console.WriteLine(s.Elapsed);
s.Restart();
DataRecord[] dr = ODataGrid.GetRecordsFromDataItems(recordsToSelect.ToArray(), false);
s.Stop();
Console.WriteLine(s.Elapsed);
s.Restart();
ODataGrid.SelectedItems.Records.AddRange(dr, false, true);
s.Stop();
Console.WriteLine(s.Elapsed);
这些时间过去了
00:00:00.0812110
00:00:08.2830562
00:00:01.1774925
问题是DataRecord数组的创建是最慢的部分
【问题讨论】:
标签: wpf infragistics xamdatagrid