1

我试图通过dotMemory分析获得我的ASP.NET MVC4/EF5 Web应用程序的内存使用情况的句柄。我仍然对我所看到的感到困惑,但是有一点我关心的是在IISExpress和WebDev上运行配置文件之间在内存方面的巨大差异。dotMemory分析iisexpress与WebDev之间巨大的内存差异

在启动时,IISExpress显示(*其实这一跃每个我杀了处理时间,并开始再次探查):

  • 总计:352.3 MB
  • 堆根0:242.7 MB
  • 堆创1:3.1 KB
  • 堆创2:31.5 MB

鉴于Webdev的:

  • 总计:180 MB
  • 堆代0:3 MB
  • 堆创1:148.2 KB
  • 堆创2:24.6 MB

本申请在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/

我没有看到什么?

编辑

内存交通快照 - 字符串是最大的消费 JScript

很多字节的使用AutoMapper的CreateMap分配 - 任何可能的补救措施? AutoMapper

+0

7mln对象流量相当大。这种流量产生的时间段是多少? 不幸的是,我无法帮助您使用EF和AutoMapper,但我对它们不够熟悉,我只能帮您解释性能分析结果。 –

+0

我真的很感谢帮助!这是在我的测试环境中,当我加载具有一堆下拉过滤器(来自数据库的所有查询)的搜索页面并加载前五十个项目(分页)时,所有项目的数量可能为数千。我有UoW和存储库模式,用于使用uow获取数据,但使用dbcontext将其分开以启用投影并禁用延迟加载,保存时进行验证以及自动跟踪查询。这是我得到dotMemory之前,我想知道如果内存中的所有列表只是转移我的问题。 – LoJo

回答

2

堆根0:242.7 MB

这是IIS的一个具体的事情有一个非常庞大的第0级堆

而且为什么我的管理内存后下井快照? IISExpress尤其如此。

dotMemory力垃圾收集得到的快照(这是MS如何分析API作品)

而且我有一个很难找到什么是真正的问题,我可以影响。

我会建议检查内存消耗的图片是否与“头脑中的图片”相关联。检查前5-10个类型的对象消耗最多的内存。查看顶级对象专门保留内存。检查内存泄漏的应用程序 - 所有对象都在特定活动完成后发布。 如果你没有看到任何不寻常的东西,也许你不需要做任何事情。

+0

现在我试图解决我的应用程序的性能问题,而不知道真正的问题是什么,因为我们没有能够从服务器管理员接收任何数据。我们目前的理论是它使用了太多的内存,导致CPU使用率接近100%。管理员将应用程序限制在30%,我们尝试减少EF的内存使用量(禁用跟踪,延迟加载,保存读取时进行验证,减少对db的调用等),但是我们发现每天都挂着工作进程请求,现在用dotMemory想知道在上下文丢失前强制查询的所有ToList()是否引入了其他内存问题。 – LoJo

+1

如果您怀疑由于GC需要太多时间而导致您的应用程序速度变慢,那么您可以查看应用程序产生的内存流量。 https://www.jetbrains.com/dotmemory/help/Analyzing_Traffic.html 如果应用程序只消耗所有可用内存并因交换而减慢速度,请查看顶部内存消费者,正如我在答案中所写的那样。 –

+0

是的,我正试图按照你的建议,但很多这对我来说仍然是新的。我添加了屏幕截图,突出了我对可以影响甚至不能影响的一些混乱。使用AutoMapper发现了高分配,但到目前为止,我能看到的唯一可以追踪和更改的内容是避免使用DisplayFor razor模板助手,以尽可能减少字典大小调整(http://blog.jetbrains.com/dotnet/2014/07/10 /上罕见的方式 - 的助力上的应用程序性能,拳击和收藏/) – LoJo