我正在测试 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] 语句
可能是什么原因,我该如何进一步调查?