1

我正在测试 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] 语句

可能是什么原因,我该如何进一步调查?

4

1 回答 1

0

经过进一步调查,我发现这个问题有点笼统。

DEBUG 模式配置为针对 x86 进行编译,而 Release 是 Any CPU(所以 x64)。

大概 EF 是非常重的指针,因此在 x64 中使用了额外的内存。

这里似乎有更多信息:

在 32 位和 64 位中使用实体框架的性能差异

于 2014-06-12T06:20:33.217 回答