遍历数据视图性能低下
Iterate through dataview slow performance
我有一个数据表,其中包含像
这样的行
123, 1, ABC, 2, 21.50, 36.33
123, 1, ABC, 2, 22.67, 0.00
456, 1, ABC, 2, 101.02, 53.92
456、1、ABC、2、0.00、0.00
...
我想遍历数据表并处理每个 ID(第 1 列)。
下面的代码工作正常,但速度很慢。
迭代 200,000 行需要 15 分钟。有没有办法提高性能?
if (dt.Rows.Count > 0)
{
DataView distinctDv = new DataView(dt);
DataTable distinctDt = distinctDv.ToTable(true, "ID");
foreach (DataRow distinctRow in distinctDt.Rows)
{
DataView dv = DataView(dt);
dv.RowFilter = "ID = " + distinctRow["ID"];
foreach (DataRowView drv in dv)
{
//Logic
}
}
您可以使用 LINQ 按 ID 对行进行分组,这应该只循环一次数据表,而不是您的 RowFilter 解决方案可能正在执行的每个键一次(原谅我的 C#,我一直在 VB.NET着陆太久了!):
var grouped = (
from row in dt.AsEnumerable()
group row by row.Field<int>("ID") into g
select g
);
foreach (var grp in grouped)
{
Console.WriteLine("ID = {0}", grp.Key);
foreach (var row in grp)
{
// Logic - row will be the DataRow
}
}
我有一个数据表,其中包含像
这样的行123, 1, ABC, 2, 21.50, 36.33
123, 1, ABC, 2, 22.67, 0.00
456, 1, ABC, 2, 101.02, 53.92
456、1、ABC、2、0.00、0.00 ...
我想遍历数据表并处理每个 ID(第 1 列)。
下面的代码工作正常,但速度很慢。 迭代 200,000 行需要 15 分钟。有没有办法提高性能?
if (dt.Rows.Count > 0)
{
DataView distinctDv = new DataView(dt);
DataTable distinctDt = distinctDv.ToTable(true, "ID");
foreach (DataRow distinctRow in distinctDt.Rows)
{
DataView dv = DataView(dt);
dv.RowFilter = "ID = " + distinctRow["ID"];
foreach (DataRowView drv in dv)
{
//Logic
}
}
您可以使用 LINQ 按 ID 对行进行分组,这应该只循环一次数据表,而不是您的 RowFilter 解决方案可能正在执行的每个键一次(原谅我的 C#,我一直在 VB.NET着陆太久了!):
var grouped = (
from row in dt.AsEnumerable()
group row by row.Field<int>("ID") into g
select g
);
foreach (var grp in grouped)
{
Console.WriteLine("ID = {0}", grp.Key);
foreach (var row in grp)
{
// Logic - row will be the DataRow
}
}