繁体   English   中英

用C#对象查找进程的内存分配的最佳方法是什么

[英]What is the best way to find a process's memory allocations in terms of C# objects

我已经编写了各种基于C#控制台的应用程序,其中一些长时间运行,有些则没有,随着时间的流逝,它们可能会占用大量内存。 通过任务管理器查看Windows性能监视器时,我总是想起同样的问题。 如何按类型细分构成此足迹的对象数目; 哪些是f可及的,哪些不是f,因此可以收集。 在很多情况下,我都执行了代码检查,以确保我不必要地握住对象的时间不超过要求的时间,并确保使用using构造对象。 最近,当我释放大量对象(例如保存在刚刚清除的集合中)时,我还研究了采用CG.Collect方法。 但是,我不确定这有什么大不同,所以我将代码丢掉了。 我猜想sysinternals套件中有一些工具可以帮助解决这些内存类型问题,但是我不确定哪个以及如何使用它们。 另一种选择是支付第三方配置文件工具,例如JetBrains dotTrace; 但我需要确保先了解免费选项,然后再向经理提出限制。

有CLR Profiler,可让您查看各种对象图(我从未使用过):

http://www.microsoft.com/downloads/details.aspx?FamilyID=86ce6052-d7f4-4aeb-9b7a-94635beebdda&displaylang=en

当然,经常推荐使用ANTS Profiler(免费试用)。 您不需要手动进行垃圾收集,GC是一种非常智能的构建解决方案,它可能比您进行的任何手动调用都更为优化。 更好的方法是最小化您保留在内存中的对象的数量-如果优先考虑内存,则应尽快删除占用大量内存的对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM