【发布时间】:2014-06-12 20:27:05
【问题描述】:
我正在尝试从具有 600 万条记录的销售表中填充字典对象。这是因为原始 linq 查询超时。我将 3 或 4 个表加入到销售表中,它太多了并且超时了。我以为我可以在内存中获取销售表,以防止 sql server 超时。
我的代码是:
var sales = dc.Sales
.Where(c => c.Active == true)
.Select(s => s)
.ToDictionary(s => s.Id, s => s);
有谁知道如何在不引发内存不足异常的情况下填充我的字典对象?
【问题讨论】:
-
所以你有这么多数据查询超时,你正试图将所有内容加载到内存中来解决这个问题?这其中的逻辑在哪里?
-
为什么不尝试在每个查询中提取固定数量的记录(如 (10000))并维护一个每次递增的序列计数器以帮助您获取下一批记录
-
我理解,但大多数时候我们将数据加载到字典中以加快应用程序的速度,然后将字典连接在一起并提取数据。我们在内存中做大部分事情。这通常有效,但这是我第一次达到 600 万条记录,所以我试图找出一种方法来完成这项工作。我们通常不会在团队中使用存储过程——我们通常使用 linq to sql 并在内存中完成大部分工作。这可能不是我想要做的,但想看看是否有人遇到过类似的情况并可以提供一些建议。感谢您的任何意见!
-
购买更多内存 :-)。开个玩笑,这永远不会有效。你需要做任何你想做的小批量的事情。
标签: c# linq exception dictionary