实体框架在发布模式下使用更多内存



我正在测试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位实体框架的性能差异

相关内容

  • 没有找到相关文章

最新更新