加速c#中的嵌套for循环

时间:2017-12-19 08:31:02

标签: c# .net linq for-loop datatable

我写了一个程序,它工作正常。但事实是,它需要花费很多时间来处理。 我在数据表中拥有数百万个数据。所以真的很难等到这个过程完成。我听说过LinQ方法。但我对此并不熟悉。任何人都可以帮我加速我的代码。

foreach (var ch in lsCh)
{
    foreach (var dt in lsDt)
    {
        foreach (var cs in lsCs)
        {
            DataRow[] result = Dtsrc.Select("Channel = '" + ch.ToString() + "' AND Date = '" + dt.ToString() + "' AND CPSTime = '" + cs + "'");

            if (result.Length > 0)
            {
                //Some calculation
            }

            Dtsrc.AcceptChanges();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

由于DataColumns和列表的类型不明确,您可能需要相应地更改它们。但也许这显示了一种更有效的方式:

我会使用HashSet<T>代替List<T>。如果您无法更改类型,则可以通过将列表传递给构造函数来创建实例:

var setCh = new HashSet<int>(lsCh);
var setDt = new HashSet<DateTime>(lsDt);
var setCs = new HashSet<DateTime>(lsCs);

现在这个查询应该更有效率:

var rowsToProcess = Dtsrc.AsEnumerable()
    .Where(r => setCh.Contains(r.Field<int>("Channel")) && setDt.Contains(r.Field<DateTime>("Date")) && setCs.Contains(r.Field<DateTime>("CPSTime")));

foreach (DataRow row in rowsToProcess)
{
    //Some calculation
}