小编Dow*_*God的帖子

如何在.NET应用程序中探索托管堆以识别可能的内存优化?

我们有一个.NET应用程序,我们的客户认为它太大而无法进行大规模部署,我们希望了解是什么有助于我们的内存占用,并且可以在不完全放弃.NET和wpf的情况下做得更好.

我们有兴趣改进总大小和私人工作集(pws).在这个问题中我只想看看pws.VMMap通常会报告105 MB的pws.其中11mb是图像,31mb是堆,52mb是托管堆,7mb是私有数据,其余是堆栈,页表等.

这里最大的奖项是托管堆.我们可以直接在我们自己的代码中占用大约8mb的manged堆,即我们创建和管理的对象和窗口.其余的是由我们使用的框架元素创建的可能的.NET对象.

我们想要做的是确定框架帐户的哪个元素占这个用途的哪个部分,并且可能重新构建我们的系统以避免在可能的情况下使用它们.任何人都可以建议如何进行这项调查?

进一步澄清:

到目前为止,我已经使用了许多工具,包括优秀的ANTS分析器和带有SOS的WinDbg,它们允许我看到托管堆中的对象,但真正感兴趣的不是"什么?",而是"为什么? " 理想情况下,我希望能够说,"好吧,因为我们使用WCF,所以在这里创建了10mb的对象.如果我们编写自己的本地传输,我们可以节省8mb的x质量风险和开发工作."

不可能在300,000多个对象上执行gcroot.

.net heap optimization managed

10
推荐指数
1
解决办法
6249
查看次数

标签 统计

.net ×1

heap ×1

managed ×1

optimization ×1