You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF DataGrid场景下DataTable查找编辑行的速度优化问题咨询

性能优化方案

问题根源

你当前两种实现的耗时都来自O(n²)的匹配逻辑:每次循环都需要全量遍历另一个集合查找对应Name的记录,1万条数据场景下会产生上亿次字符串比较操作,再加上LINQ的额外开销、DataGrid绑定的实时刷新开销,最终导致耗时过长。

最优实现(优化后耗时通常低于100ms)

核心优化思路

  1. 先将mapData转为字典,将Name查找复杂度从O(n)降到O(1)
  2. 临时关闭DataTable的事件通知,避免修改行值时频繁触发DataGrid界面刷新
  3. 减少不必要的LINQ调用、重复的字段类型转换

代码实现

// 1. 仅遍历一次mapData生成字典,若存在Name重复的情况可根据业务调整去重逻辑
var nameValueMap = mapData.ToDictionary(k => k.Name, v => v.Value);

// 2. 临时关闭DataTable的事件通知,避免每次更新行都触发UI重绘
MapDataTable.BeginLoadData();

try
{
    // 3. 遍历DataTable行,直接从字典取值赋值
    foreach(DataRow row in MapDataTable.Rows)
    {
        string name = row.Field<string>("Name");
        if(nameValueMap.TryGetValue(name, out var value))
        {
            // 推荐用列名索引代替硬编码的数字下标,避免后续列顺序调整后出错
            row["Value 2"] = value;
        }
    }
}
finally
{
    // 4. 恢复事件通知,一次性触发UI刷新
    MapDataTable.EndLoadData();
}

额外优化建议

如果你的DataTable中Name列取值唯一,可以在初始化DataTable时就将Name列设为主键,后续有更多列新增需求时,行查找效率会更高:

// 初始化DataTable阶段设置主键
MapDataTable.PrimaryKey = new DataColumn[] { MapDataTable.Columns["Name"] };

内容的提问来源于stack exchange,提问作者Raya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 07:57:02