我试图创建一个具有329734个元素的Dictionary<int,int>
。当我尝试创建一个内存字典时,将一个唯一的整数列映射到整数Id,代码
var dict = ctx.MyEntity.ToDictionary(e => e.SomethingUnique, e => e.Id);
引发
OutOfMemoryException异常
应该有足够的内存来创建这两个整数的字典。这里发生了什么,我该如何避免呢?
答案 0 :(得分:4)
即使只消耗了两个字段,也会返回整个对象。由于对象中有许多属性,因此运行时耗尽可用内存。
使用投影
可以避免这种情况var dict = ctx.MyEntity
.Select(e => new { SomethingUnique = e.SomethingUnique,
Id = e.Id })
.ToDictionary(e => e.SomethingUnique, e => e.Id);
即使您的内存不足,使用投影也会更有效率。