c# - 加速 DataTable 迭代
问题描述
所以我有一个DataTable data
需要替换一些列的内容。
string[] columns = { "Column1", "Column2", "Column3" };
int rowCount = data.Rows.Count;
int colCount = columns.Length;
for (int i = 0; i < rowCount; i++)
{
for (int j = 0; j < columnsCount; j++)
{
data.Rows[i][columns[j]] = "replace text";
}
}
该代码完成了它的工作,但由于 DataTable 有更多记录,它的速度很慢。12k 行大约需要 4 分钟。
我怎样才能加快这个过程?
解决方案
因此,对于 100 万行和 3 列,每个单元格上的查找和替换大约需要 2 秒(在我的 PC 上)。我猜您对响应每个更改的数据绑定有问题,或者由于某种原因您的替换操作非常慢。
Stopwatch sw = new Stopwatch();
DataTable dt = new DataTable();
dt.Columns.Add("Column1");
dt.Columns.Add("Column2");
dt.Columns.Add("Column3");
Random r = new Random();
sw.Start();
for (int i = 0; i < 1_000_000; i++)
{
dt.Rows.Add(dt.NewRow());
for (int j = 0; j < 3; j++)
dt.Rows[i][j] = r.Next().ToString();
}
Console.WriteLine("Row Count:" + dt.Rows.Count);
Console.WriteLine("Rows with the digit 0:" + dt.Rows.Cast<DataRow>().Count(row=>((string)row[0]).Contains('0')));
sw.Stop();
Console.WriteLine("Time taken to fill table:" + sw.Elapsed);
sw.Reset();
sw.Start();
for( int i = 0 ; i < 1_000_000 ; i++)
for (int j = 0; j < 3; j++)
dt.Rows[i][j] = ((string) dt.Rows[i][j]).Replace('0', '1');
sw.Stop();
Console.WriteLine("Row Count:" + dt.Rows.Count);
Console.WriteLine("Rows with the digit 0:" + dt.Rows.Cast<DataRow>().Count(row=>((string)row[0]).Contains('0')));
Console.WriteLine("Time taken to update table:" + sw.Elapsed);
Console.ReadLine();
推荐阅读
- ios - 为什么 UIScrollView 的内容不居中?
- python - ValueError:在networkx中设置具有序列的数组元素
- html - 隐藏具有相同定义的 SVG 时,SVG 标记消失
- python - 为什么我的比较运算符不能在 for 循环中工作?
- javascript - JWT REST api 身份验证:登录失败。电子邮件或密码不正确
- python - 如何为 Z3 中的变量分配新值?
- open-liberty - 包含 mpHealth 功能会破坏 Open Liberty 中的独立应用程序
- c# - 更改窗口焦点后无法将文本写入控制台
- python - 依赖解析器不工作 - 斯坦福核心 NLP
- php - WordPress Sage 9 控制器中的函数在模板中不可调用