ToDictionary抛出OutOfMemoryException

时间:2015-05-08 01:48:15

标签: entity-framework entity-framework-6

我试图创建一个具有329734个元素的Dictionary<int,int>。当我尝试创建一个内存字典时,将一个唯一的整数列映射到整数Id,代码

var dict = ctx.MyEntity.ToDictionary(e => e.SomethingUnique, e => e.Id);

引发

  

OutOfMemoryException异常

应该有足够的内存来创建这两个整数的字典。这里发生了什么,我该如何避免呢?

1 个答案:

答案 0 :(得分:4)

即使只消耗了两个字段,也会返回整个对象。由于对象中有许多属性,因此运行时耗尽可用内存。

使用投影

可以避免这种情况
var dict = ctx.MyEntity
              .Select(e => new { SomethingUnique = e.SomethingUnique,
                                 Id = e.Id })
              .ToDictionary(e => e.SomethingUnique, e => e.Id);

即使您的内存不足,使用投影也会更有效率。