我在一个列表中有大约 20 万条记录,我正在遍历它们并形成另一个集合。这在我的本地 64 位 Win 7 上运行良好,但是当我将它移动到 Windows Server 2008 R2 时,它需要很多时间。差不多有一个小时左右的差别!

我尝试查看已编译的查询,但仍在弄清楚。
由于各种原因,我们无法进行数据库连接并检索子值

这是代码:

//listOfDetails is another collection
List<SomeDetails> myDetails = null;
foreach (CustomerDetails myItem in customerDetails)
{

    var myList = from ss in listOfDetails
                 where ss.CustomerNumber == myItem.CustomerNum
                 && ss.ID == myItem.ID
                 select ss;
     myDetails = (List<SomeDetails>)(myList.ToList());
     myItem.SomeDetails = myDetails;
}

最佳答案

我会这样做:

var lookup = listOfDetails.ToLookup(x => new { x.CustomerNumber, x.ID });
foreach(var item in customerDetails)
{
    var key = new { CustomerNumber = item.CustomerNum, item.ID };
    item.SomeDetails = lookup[key].ToList();
}

这段代码的最大好处是它只需要循环一次 listOfDetails 来构建查找——这只不过是一个哈希映射。之后我们只使用键来获取值,这非常快,因为这是构建哈希映射的目的。

关于c# - 优化 LINQ to Objects 查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12374334/

10-17 02:22