在XamDataGrid

时间:2018-02-08 09:42:21

标签: wpf infragistics xamdatagrid

我正在评估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数组的创建是最慢的部分

1 个答案:

答案 0 :(得分:0)

为什么要通过数据网格覆盖您的商品来源?您可以使用MVVM方法将项目源作为ObservableCollection或List。在您的视图模型中,您可以访问数据源以及所选项目。