首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >对于查找.NET中的内存泄漏,哪些策略和工具是有用的?

对于查找.NET中的内存泄漏,哪些策略和工具是有用的?
EN

Stack Overflow用户
提问于 2008-09-25 15:41:32
回答 8查看 112.8K关注 0票数 155

我写了10年的C++。我遇到了内存问题,但只要花点力气就可以解决。

在过去的几年里,我一直在编写C#。我发现我仍然有很多内存问题。由于不确定性,它们很难诊断和修复,而且因为C#的理念是,当您非常确定地担心这些事情时,您不应该担心这些事情。

我发现的一个特殊问题是,我必须显式地处理和清理代码中的所有内容。如果我不这样做,那么内存分析器就没有真正的帮助,因为到处都有太多的废话,你无法在它们试图向你展示的所有数据中找到一个漏洞。我想知道我是不是理解错了,或者我得到的工具不是最好的。

哪种策略和工具对解决.NET中的内存泄漏有用?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-09-25 15:43:44

当我怀疑内存泄漏时,我会使用Scitech的MemProfiler

到目前为止,我发现它非常可靠和强大。它至少在一个场合救了我的命。

GC在.NET IMO中工作得很好,但就像任何其他语言或平台一样,如果你写了糟糕的代码,糟糕的事情就会发生。

票数 52
EN

Stack Overflow用户

发布于 2008-09-25 16:26:38

对于忘记处理的问题,可以尝试使用the solution described in this blog post。这是它的本质:

代码语言:javascript
复制
    public void Dispose ()
    {
        // Dispose logic here ...

        // It's a bad error if someone forgets to call Dispose,
        // so in Debug builds, we put a finalizer in to detect
        // the error. If Dispose is called, we suppress the
        // finalizer.
#if DEBUG
        GC.SuppressFinalize(this);
#endif
    }

#if DEBUG
    ~TimedLock()
    {
        // If this finalizer runs, someone somewhere failed to
        // call Dispose, which means we've failed to leave
        // a monitor!
        System.Diagnostics.Debug.Fail("Undisposed lock");
    }
#endif
票数 41
EN

Stack Overflow用户

发布于 2008-10-01 00:47:37

This blog有一些非常棒的演练,使用windbg和其他工具来跟踪所有类型的内存泄漏。优秀的阅读可以提高你的技能。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/134086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档