当前位置:  开发笔记 > 编程语言 > 正文

有什么方法可以解决C#中的内存泄漏问题

如何解决《有什么方法可以解决C#中的内存泄漏问题》经验,为你挑选了2个好方法。

我正在学习C#.据我所知,您必须正确设置以使垃圾收集器实际删除所有内容.我正在寻找多年来从你那里学到的智慧,聪明.

我来自C++背景,非常习惯代码气味和开发模式.我想知道C#中的代码气味是什么样的.给我建议!

删除内容的最佳方法是什么?

如何解决"内存泄漏"问题?


编辑:我正在尝试开发一个"总是为内存管理做的东西"的列表


非常感谢.



1> Dead account..:

C#,.NET Framework使用托管内存,所有内容(但分配的​​非托管资源)都是垃圾回收.

可以安全地假设托管类型总是被垃圾收集.那包括arrays,classesstructures.随意做int[] stuff = new int[32];,忘记它.

如果在类中打开文件,数据库连接或任何其他非托管资源,请实现IDisposable接口,并在Dispose方法中取消分配非托管资源.

任何实现IDisposable的类都应该显式关闭,或者在(我认为很酷)使用块中使用;

using (StreamReader reader = new StreamReader("myfile.txt"))
{
   ... your code here
}

这里.NET将在{}范围之外处置读取器.


"可以安全地假设托管类型总是被垃圾收集." 这句话是错的.如果仍然可以进行垃圾收集,那么程序员必须始终牢记在不再需要时取消他/她的根引用.

2> Marc Gravell..:

GC的第一件事是它是非确定性的; 如果你想及时清理资源,实施IDisposable和使用using; 这不会收集托管内存,但可以帮助很多非托管资源和转发链.

特别需要注意的事项:

很多钉扎(对GC的作用有很多限制)

很多终结器(你通常不需要它们;减慢GC)

静态事件 - 保持大量对象图存活的简单方法;-p

廉价的长寿命物体上的事件,可以看到应该清理的昂贵物体

"捕获变量"意外地保持图表活着

为了调查内存泄漏......"SOS"是最简单的路线之一; 您可以使用SOS查找类型的所有实例,以及可以看到它的内容等.

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有