dotMemory 分析 iisexpress 和 WebDev 之间巨大的内存差异

dotMemory profiling huge memory difference between iisexpress & WebDev

我正在尝试通过 dotMemory 分析来处理我的 ASP.NET MVC4 / EF5 Web 应用程序的内存使用情况。我仍然对我所看到的感到困惑,但让我担心的一件事是 运行 IISExpress 和 WebDev 上的配置文件之间的内存差异很大。

启动时,IISExpress 显示(* 实际上,每次我终止进程并再次启动探查器时都会跳转):

而 WebDev:

此应用程序托管在 IIS 7.5 上,我应该信任哪个?为什么我的托管内存在快照后出现故障?对于 IISExpress 尤其如此。

我也很难找到我可以影响的真正问题。事情往往归结为 EF 或 AutoMapper,我看不出如何避免实体 linq 查询和 CreateMaps 等中的迭代器分配。(http://blog.jetbrains.com/dotnet/2014/07/24/unusual-ways-of-boosting-up-app-performance-lambdas-and-linqs/)

我没看到什么?

编辑

内存流量快照 -- 字符串是最大的消费者

使用 AutoMapper 的 CreateMap 分配了大量字节——有什么可能的补救措施吗?

Heap Gen 0: 242.7 MB

这是 IIS 具有非常大的第 0 代堆的一个特定问题

And why does my managed memory go down after a snapshot? This is especially true with IISExpress.

dotMemory 在获取快照时强制进行垃圾收集(这就是 MS 分析 API 的工作方式)

Also I'm having a hard time finding what are real issues I can impact.

我建议检查内存消耗图片是否与图片相关 "in your head"。检查前 5-10 种对象消耗最多内存的类型。查看top对象独占保留内存。检查内存泄漏的应用程序 - 所有对象都在特定 activity 完成后释放。 如果你没有看到任何非常不寻常的东西,也许你不需要做任何事情。