首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

程序跑了1天,内存使用竟达到1G!请指导

2012-01-31 
程序跑了1天,内存使用竟达到1G!请大虾指导用vs2008做了版程序,开始运行时占用4M ,随着时间的增加,内存占用

程序跑了1天,内存使用竟达到1G!请大虾指导
用vs2008做了版程序,开始运行时占用4M ,随着时间的增加,内存占用越来越大,一天后,竟达到1G,都快死机了。
 请高手指导,程序中需做哪些工作才能减少占用资源,如使用过多New,如何释放等。
  恳请指点!

[解决办法]
http://www.cnblogs.com/guodapeng/archive/2008/04/02/1134005.html
[解决办法]

如果是C++的话,
主要看你new的类是不是删除了 ,如果类的成员变量有指针什么的,析构函数都要写对应的删除代码 。
搜索你所有的new的位置 ,你内存增长这么快肯定是你频繁使用的的东西;断点跟踪到你new的位置,
跟到它不起作用的时候看是不是被删除了。
原则是一个new对应一个delete。

其它没有垃圾回收机制的语言只是函数不同,方法差不多 、。

工具也是可以检测的,虽然不是很准 。~~
[解决办法]
写程序的时候要注意,俺主要用C的, 动态分配时总是
写好malloc,马上在下一句写上free(),然后再填中间的代码。
fopen也类似。

[解决办法]
用.net还内存泄漏.
主要是两个原因.
1.使用了系统资源,这些系统资源,net本身无法回收,需要手动回收,比如调用API或者使用系统图像资源等等.
2.net架构里面类用完后没有及时的把引用切断,比如都通过map关联上了哦,系统无法自动回收.


[解决办法]
看循环里面的申请空间的地方是不是一直在占用呢,比如说某个写日志或报表的内存缓冲区一直扩张而没有做限制处理。。
我以前搞C的时候就出现过类似的问题,最后发现时报表内存没做好限制,循环里面一直申请空间……
[解决办法]
一般使用Memory.Profiler 自己跟一下程序,确定好泄露的位置才可动手改。

虽然ls都给很多建议,不过都是些普适建议。可以照着做,不过如果不先确定好泄露的位置,你改100个普适的内存泄露点,也比不上一个关键的性内存泄露点
[解决办法]
引用:
引用:
datable dataset 用完后要dispose

每次执行完数据库后,都要dispose,每次用的时候再New,是吗?


这个要 斟酌 时间复杂度 和空间复杂度 还是看需要。
不要什么理论一看到就死搬硬套,要学会灵活应用。
而知道什么时候 该怎么用,才是本事。 知道 懂得 明白 和这个相比都不值钱。

热点排行