【发布时间】:2014-08-05 16:12:07
【问题描述】:
我有一个 MVC 应用程序,它使用 EntityFramework 连接到 MS SQL Server 2012。我正在尝试检索存储在 Documents 表中的所有文档的总文件大小。
我正在使用以下代码:
this.Documents.Sum(x => x.FileSize);
Documents 的类型为 EntityCollection<Document>。该操作需要超过 1.6 分钟才能完成,此时它会崩溃并显示
Exception of type 'System.OutOfMemoryException' was thrown.
当然,这与直接通过 SQL Server Management Studio 执行时只需几毫秒即可完成 SELECT SUM(FileSize) FROM Documents 的操作相同。
不管怎样,总大小为 816mb,包括 1,661 个文档,所以它并不十分庞大。
【问题讨论】:
-
您是否附加了 sql profiler 并检查了正在发送的查询?
-
你可能在 this.Documents 之前的某个地方做一个 ToList() 吗?因为如果它已经在内存中,那么 Sum 将在客户端执行...
-
如果它只是总和尝试 this.Documents.Select(c => c.FileSize).Sum() 代替,这样你就不会获取太多数据
-
或者你可以试试this.Documents.Select(c => c.Sum(i => i.FileSize))
标签: c# sql sql-server entity-framework