【问题标题】:Entity Framework using more memory in Release mode实体框架在发布模式下使用更多内存
【发布时间】: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


【解决方案1】:

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

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

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

这里似乎有更多信息:

Performance difference using entity framework in 32 bit and 64 bit

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多