如何找到处置和内存问题?C#

6 c# performance memory-leaks

我的应用程序不久前使用的是150mb的内存,现在是286mb.它慢慢升起,所以我必须忘记丢弃一些东西.这对我来说不是一个问题,因为我有4gb,但我想把它发送给只有1gb内存的其他人.除了然后逐行完成代码我怎样才能找到需要处理的对象或者只是一般大的对象呢?

Jar*_*Par 5

延伸JP和Reed的答案.

我想澄清一点混乱.如果您看到内存显着增加,则调用Dispose不会出现问题.Dispose通常用于释放非托管资源,如句柄.这些不占用太多内存,而是作为资源更珍贵.

内存的增加通常与可从直接或间接通过堆栈对象或强GC句柄间接生根的托管对象访问的大对象或集合相关联.这是您可能希望集中研究的领域.

  • 此外,请仔细查看您订阅的任何活动.该事件包含对订阅者的引用,如果您从未取消订阅,则永远不会删除该引用. (2认同)

JP *_*oto 2

查看.NET 内存分析器。有 15 天的试用期,并且非常值得支付许可费。

通过收集和比较 .NET 内存快照轻松识别内存泄漏 快照包括收集快照时有关 .NET 实例分配和活动实例的数据。它们提供了大量有用的信息,并且可以轻松识别潜在的内存泄漏,尤其是在比较两个快照时。