社区
C#
帖子详情
.Net 占用内存资源不释放问题
jsnjlhb
2011-07-19 05:32:41
我的程序是WinForm
现在遇到这样一个问题,程序运行运行着一段时间后,发现程序内存都快达到400M了,导致程序越来越缓慢,
特别时刷新界面的时候,如果界面控件比较多的,更是明显
所以我想问一下,如何有效释放内存?
网上有人提出用SetProcessWorkingSetSize,可这只是把物理内存转到虚拟内存,并不能解决实际问题
...全文
780
18
打赏
收藏
.Net 占用内存资源不释放问题
我的程序是WinForm 现在遇到这样一个问题,程序运行运行着一段时间后,发现程序内存都快达到400M了,导致程序越来越缓慢, 特别时刷新界面的时候,如果界面控件比较多的,更是明显 所以我想问一下,如何有效释放内存? 网上有人提出用SetProcessWorkingSetSize,可这只是把物理内存转到虚拟内存,并不能解决实际问题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
单骑走天涯
2011-07-28
打赏
举报
回复
17楼正解
.net的垃圾回收,是定时的循环机制
时间到后,会回收不再被使用的对象、资源
如果所有的类都实现IDispose接口,比较麻烦
但确实有效的、及时回收资源
如果没有实现IDispose接口,
将DataSet、DataTable、实例化的对象等
在使用完后, 直接在代码里对其设置为 null
这样,在垃圾回收时,才能被有效回收
另外,对字符串
最好不要使用 string a = "dsf"+"gfdg"+"lsdkfj"的方式
即:不要使用 + 号来组合字符串,
而使用 string.Format() 或 StringBuilder对象来处理
sdl2005lyx
2011-07-28
打赏
举报
回复
我做通信时候的做法:
1、通讯类创建类全局缓冲区,尽量不要在发送、接收处理时临时分配心空间。
2、使用GC.Collect(),对不得已临时分配空间强制释放。
3、实现IDispose接口,显示调用Dispose接口,加速托管资源释放。
4、重写Object.Finalize 方法,理非托管资源。
venya
2011-07-21
打赏
举报
回复
mark
jsnjlhb
2011-07-21
打赏
举报
回复
litaoye:
.net Memory Profile 没找到相应的中文操作说明文档,不太会操作
我的程序中会频繁的调用其他窗体程序,我每次都是new一个实例后显示
form1 frm=new form1
frm.ShowDiag()
这样会不会影响性能,对于此种情况是不是把窗体隐藏起来会节省内存资源呢?
windowslinuxjavanet
2011-07-19
打赏
举报
回复
欢迎.net家族的斗士们,踊跃加入,共同探讨微软.net的奥秘,共同维护和推广.net的应用!69594961
windowslinuxjavanet
2011-07-19
打赏
举报
回复
执行完毕了 要手动释放对象 垃圾回收
system.gc();
dispose();
绿色夹克衫
2011-07-19
打赏
举报
回复
建议lz用.net Memory Profile查一下,看看是哪些东西因为被引用了而没有释放!
鸭梨山大帝
2011-07-19
打赏
举报
回复
"那我程序中定义和引用的类呢,是属于托管的还是非托管的资源呢?也需要我手动回收吗?"
那就要看你定义,引用的类具体是什么了,有些是非托管资源,有些是托管资源.
非托管资源一般都需要手动回收. 例如,连接,文件句柄,直接申请的内存空间.
而这里提及的手动回收是指调用实现IDisposable接口的类的释放方法,还是指GC.Collect ?
很多情况下,我们无法保证托管代码中的类是否已经实现了IDisposable,所以在不明确的情况下,最好是释放一下.
另外,很多情况下,不需要我们人为手动去调用GC.Collect.
jsnjlhb
2011-07-19
打赏
举报
回复
我上网查询了一下,系统有垃圾回收机制回收托管资源,但窗体等属于非托管的,需要手动释放资源
那我程序中定义和引用的类呢,是属于托管的还是非托管的资源呢?也需要我手动回收吗?
鸭梨山大帝
2011-07-19
打赏
举报
回复
"所以我想问一下,如何有效释放内存?"
优化你的代码,查看是否有某处在不停或者不定时的申请内存,而且不释放.
Icedmilk
2011-07-19
打赏
举报
回复
只要你的代码中没有对空间的引用,就会被回收。
垃圾回收机制是运行在独立的线程上的,所以就算你不主动调用GC.Collect()也会释放
关机问题是,对象不再使用了就不要再保留对其的引用
jsnjlhb
2011-07-19
打赏
举报
回复
[Quote=引用 2 楼 xuexiaodong2009 的回复:]
使用了自定义控件?动态生成了大量控件?
需要手动释放的
[/Quote]
我程序中使用了大量的自定义控件,请问这些控件该如何释放呢
tliang
2011-07-19
打赏
举报
回复
特别是非托管资源一定要手工释放,using。
wind4fly
2011-07-19
打赏
举报
回复
写小函数,用完立即释放。
叫我三三
2011-07-19
打赏
举报
回复
根据情况多用静态,
定义空字符串最好用string.empty;
用过不用的资源,都手动释放一下.
多用using(){}
云瑀
2011-07-19
打赏
举报
回复
GC.Collect();
xuexiaodong2009
2011-07-19
打赏
举报
回复
使用了自定义控件?动态生成了大量控件?
需要手动释放的
ohkuy
2011-07-19
打赏
举报
回复
自己把程序优化一下,
对象用完后就释放,
不要等CLR来做
ASP
.NET
就业实例教程
课程1: ASP
.NET
基础入门,课程2: ADO
.NET
数据库访问技术应用,课程3:一般处理程序,课程4:三层架构,课程5:WebForm控件,课程6:委托、匿名方法、Lambda、Linq查询,课程7:ASP
.NET
MVC 专题标签:三层架构,MVC...
VB
.Net
内存
管理与
内存
释放
的方法
托管代码的
内存
管理是自动的,
.NET
可以保证我们的托管程序在结束时全部
释放
,这为我们编程人员省去了不少麻烦,我们可以连想都不想怎么去管理
内存
,反正
.NET
自己会保证一切。好吧,有道理,有一定的道理。
问题
是,当...
ASP
.NET
Core页面刷新导致
内存
持续增加不
释放
问题
在ASP
.NET
Core应用程序中,页面刷新是常见的操作,但是在某些情况下,页面刷新可能会导致
内存
持续增加而不被
释放
,这可能会导致应用程序的性能下降和
资源
浪费。以上是一些常见的解决方案,可以根据具体的应用程序...
.NET
程序
内存
泄漏排查的两种方式
如果这些非托管的
资源
没有
释放
或者及时
释放
,程序长时间运行会导致
内存
慢慢被占满直到程序崩溃.
.NET
中常见的
内存
泄漏主要有以下三种:静态变量泄露:静态变量中的成员所
占用
的
内存
如果不手动处理是无法自动
释放
的,...
深入理解
.Net
中的
内存
释放
,以及有关的注意事项
首先声明,本文转自微软中国社区!引言作为一个
.NET
程序员,我们知道托管代码的
内存
管理是自动的。...
问题
是,当我们用到非托管
资源
时
.NET
就不能自动管理了。这是因为非托管代码不受CLR(Common LanguageRun
C#
110,545
社区成员
642,581
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章