han*_*r18 3 c# linq-to-objects
我在列表中有大约200K的记录,我正在循环它们并形成另一个集合.这在我的本地64位Win 7上工作正常但是当我将它移动到Windows Server 2008 R2时,需要花费很多时间.几乎差不多一个小时!
我试着查看Compiled Queries并且仍在计算它.
由于各种原因,我们无法进行数据库连接并检索子值
这是代码:
//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;
}
Run Code Online (Sandbox Code Playgroud)
我会这样做:
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();
}
Run Code Online (Sandbox Code Playgroud)
这段代码的最大好处是它只需要遍历listOfDetails一次以构建查找 - 这只不过是一个哈希映射.之后我们只使用密钥获取值,这非常快,因为这是为哈希映射构建的.
| 归档时间: |
|
| 查看次数: |
1759 次 |
| 最近记录: |