C#自定义控件资源释放问题

lfc6329356 2019-10-10 04:46:16
这边使用了多个UserControl,展示界面,当业务办完之后,想把这个UserControl占用的资源释放,UserCOntrol没有Close方法,所以只用了Dispose方法,但发现用了Dispose方法资源没有恢复到之前的内存,请问还有什么办法吗?
...全文
704 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lfc6329356 2019-10-11
  • 打赏
  • 举报
回复
引用 12 楼 正怒月神 的回复:
你指的业务办完, 是指当前UserControl,不在被引用了吗? 如果界面还存在,那么GC怎么回收呢
没被再引用了,然后Dispose掉,看到内存并未恢复之前
正怒月神 2019-10-11
  • 打赏
  • 举报
回复
你指的业务办完, 是指当前UserControl,不在被引用了吗? 如果界面还存在,那么GC怎么回收呢
  • 打赏
  • 举报
回复
引用 10 楼 lfc6329356 的回复:
引用 8 楼 exception92 的回复:
重新初始化控件。
重新new了,但是之前释放的资源并没有回收,也不知道GC什么时候回收,导致程序内存越来越多。
自定义控件是否包含非托管资源,包含的话需要手动释放掉。
lfc6329356 2019-10-11
  • 打赏
  • 举报
回复
引用 8 楼 exception92 的回复:
重新初始化控件。
重新new了,但是之前释放的资源并没有回收,也不知道GC什么时候回收,导致程序内存越来越多。
lfc6329356 2019-10-11
  • 打赏
  • 举报
回复
引用 7 楼 datafansbj 的回复:
.Net 为了提升性能,可能占用相当多的内存资源,当内存占用太多之后会自动进行垃圾收集。之所以没有释放资源,原因有二: 1、内存还没有占用到 .Net 认为需要清理的程度(如系统有8G内存,该程序使用了4G) 2、程序需要使用大量资源,不能释放,否则程序逻辑会出错(如创建了太多的对象)
是啊,我电脑有4g,之前是所有界面都放在一个List里面,用的时候show出现,但是这样的话,界面越来越多,导致程序占用1G多了。所以打算用完一个业务的界面,就dispose,但是GC还没回收,导致程序出现各种问题。
  • 打赏
  • 举报
回复
重新初始化控件。
datafansbj 2019-10-11
  • 打赏
  • 举报
回复
.Net 为了提升性能,可能占用相当多的内存资源,当内存占用太多之后会自动进行垃圾收集。之所以没有释放资源,原因有二: 1、内存还没有占用到 .Net 认为需要清理的程度(如系统有8G内存,该程序使用了4G) 2、程序需要使用大量资源,不能释放,否则程序逻辑会出错(如创建了太多的对象)
datafansbj 2019-10-11
  • 打赏
  • 举报
回复
GC.Collect() 只是通知操作系统进行垃圾收集,但是到底何时进行由操作系统来决定,我们不能确定。
lfc6329356 2019-10-10
  • 打赏
  • 举报
回复
没人吗????
lfc6329356 2019-10-10
  • 打赏
  • 举报
回复
还有人吗?????
lfc6329356 2019-10-10
  • 打赏
  • 举报
回复
引用 2 楼 datafansbj 的回复:
控件 Dispose 时 .Net 不会回收资源,而是由垃圾收集器来智能处理。 你可以执行 GC.Collect() 方法强制回收资源。
试过了,也不行。
datafansbj 2019-10-10
  • 打赏
  • 举报
回复
控件 Dispose 时 .Net 不会回收资源,而是由垃圾收集器来智能处理。 你可以执行 GC.Collect() 方法强制回收资源。
lfc6329356 2019-10-10
  • 打赏
  • 举报
回复
有人吗?!!!!!!

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧