我写了10年的C++。我遇到了内存问题,但只要花点力气就可以解决。
在过去的几年里,我一直在编写C#。我发现我仍然有很多内存问题。由于不确定性,它们很难诊断和修复,而且因为C#的理念是,当您非常确定地担心这些事情时,您不应该担心这些事情。
我发现的一个特殊问题是,我必须显式地处理和清理代码中的所有内容。如果我不这样做,那么内存分析器就没有真正的帮助,因为到处都有太多的废话,你无法在它们试图向你展示的所有数据中找到一个漏洞。我想知道我是不是理解错了,或者我得到的工具不是最好的。
哪种策略和工具对解决.NET中的内存泄漏有用?
发布于 2008-09-25 15:43:44
当我怀疑内存泄漏时,我会使用Scitech的MemProfiler。
到目前为止,我发现它非常可靠和强大。它至少在一个场合救了我的命。
GC在.NET IMO中工作得很好,但就像任何其他语言或平台一样,如果你写了糟糕的代码,糟糕的事情就会发生。
发布于 2008-09-25 16:26:38
对于忘记处理的问题,可以尝试使用the solution described in this blog post。这是它的本质:
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
发布于 2008-10-01 00:47:37
This blog有一些非常棒的演练,使用windbg和其他工具来跟踪所有类型的内存泄漏。优秀的阅读可以提高你的技能。
https://stackoverflow.com/questions/134086
复制相似问题