【发布时间】:2014-06-12 03:24:21
【问题描述】:
我正在测试 EF5 与 EF6.1(代码优先、POCO、ProxyCreation 启用)的内存使用情况,并遇到了一些令人担忧的行为。
我的测试很简单:
1) 使用 GC.GetTotalMemory(false) 检查内存
2) 通过不同的 DataContext 运行约 20 个复杂的查询,并在整个过程中保持对所有结果的引用
3) 使用 GS.GetTotalMemory(false) 比较内存
4) 清除对所有内容的引用
5) 比较内存 ssing GC.GetTotalMemory(true)(强制垃圾回收
比较 (3) 和 (5) 中的内存让我了解 EF 在此过程中分配了多少内存。
EF5 和 EF6.1 差别不大
但是,在 Debug 模式下编译与在 Release 模式下编译有很大区别:
调试模式:分配了 ~150MB
发布模式:已分配~280MB
我已经验证了这些结果如下:
可比较的结果出现在任务管理器中(私有工作集)
EF5 和 EF6.1 相同
在 Visual Studio 中运行和直接运行 EXE 相同
在没有其他程序运行的工作站上
我的代码中没有 [if #debug] 语句
可能是什么原因,我该如何进一步调查?
【问题讨论】:
-
嗨@Brendan,您可能想从这个问题中删除 b)。当您只提出一个问题时,您更有可能得到答案,更不用说您已经分别提出了调试问题。
-
谢谢。我只是决定稍后发布(b),所以我已经从这个问题中删除了它。
标签: memory-management entity-framework-5 release-mode entity-framework-6.1 debug-mode