我正在评估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.Recordsif上的循环快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数组的创建是最慢的部分
答案 0 :(得分:0)
为什么要通过数据网格覆盖您的商品来源?您可以使用MVVM方法将项目源作为ObservableCollection或List。在您的视图模型中,您可以访问数据源以及所选项目。