我正在测试EF5与EF6.1(代码优先,POCO,启用ProxyCreation)的内存使用情况,并遇到一些有关的行为。
我的测试很简单:
1)使用GC.GetTotalMemory(false)检查内存
2)在不同的datacontext中运行~20个复杂查询,在整个
中保留对所有结果的引用3)使用GS.GetTotalMemory(false)比较内存
gettotalmemory (true)(强制垃圾回收 )比较(3)和(5)的内存,可以让我知道EF在进程中分配了多少内存。
EF5与EF6.1之间差异不大
但是在调试模式和发布模式下编译有很大的不同:
调试模式:~150MB分配
释放模式:~280MB分配
我验证了这些结果如下:
比较结果出现在任务管理器(私有工作集)
EF5和EF6.1相同
与在Visual Studio中运行和直接运行EXE相同
在没有其他程序运行的工作站上
我的代码中没有[if #debug]语句
可能的原因是什么,我该如何进一步调查?
经过进一步调查,我发现这个问题有点普遍。
DEBUG模式被配置为编译x86,而Release模式是任何CPU(所以x64)。
估计EF是指针非常重的,因此在x64中使用了额外的内存。
这里似乎有更多的信息:
使用32位和64位实体框架的性能差异