没错!
没必要管它,你管不了的。
如果你一定要释放,试一下用Dispose()方法,强制释放内存。
没必要管它,你管不了的。
如果你一定要释放,试一下用Dispose()方法,强制释放内存。
解决方案 »
- 奇怪,程序在开机第一次运行时报错:ORA-01008 并非所有变量都已关联
- WINFORM的请问一下如何做这样的LISTview
- AspxGridView 自带的EditButton和NewButton 事件
- 【菜鸟问题】一些菜鸟相关的建站问题!还希望大家帮忙!
- 有以个存储过程中使用了exec执行以个动态组合的语句,有什么办法取回Output返回值!
- 网站的问题
- 可以不可以不通过下标来访问数组????
- 用.net如何连接到局域网上的active directory服务器 在线等!进者有分。
- C# 内存莫名奇妙溢出
- DataGrid中在编辑某行中一列时,如何限定该列必须输入及输入的格式
- 前辈:我下一步该学些什么?
- DataGrid的分页的问题
using()
{}
来把你自动掉用吧.
但是这次的情况是这样的:用户选择图片数据库里的一个类别,然后我就动态的把图片创建成picturebox在panel上显示出来。每批图片都好几MB。用户随便浏览几次,内存就呼呼的往上涨。下午的时候,dispose每个picturebox但是不见内存回来,所以才发问的。晚上又试了一下dispose每个picturebox的image,结果内存都释放了。原来image属性在picturebox类里只是一个引用,所以即使删除了picturebox,image属性也还得手动释放。这样理解是否正确?
你非得要强行释放,那就用System.GC.Collect()吧。
在.net中,内存的分配的的确应该自动管理,但那仅仅限于为托管类分配的受托管管理的内存。
实际上,除了托管资源外,系统中还有很多非托管资源,比如image类为image分配的句柄,为图像分配的内存。这些宝贵资源并不受clr管理,clr只知道image类所占用的内存,并不知道该类还是用了很多非托管资源。
虽然通常clr在回收这些类的时候这些类的finalize方法也会回收相应的资源,但这通常都太迟了。所以这些类都实现了IDispose接口,要求用户在不使用该类的时候,显示调用Dispose方法。也就是说,对于实现了IDispose的类,我们都应该显示调用Dispose方法。
看了楼上这句话,我又较长时间跟踪了一下内存的变化,发现我以前观察有误。现在对于那个panel控件,只要Clear掉所有的Controls,内存过段时间会被自动收回来的。
看来C#确实会自动释放掉这些内存资源,并不需要用户自己释放。
只是释放内存的时机好像是其本身自己的机制定的,似乎当用户操作频繁、系统繁忙的时候,他就不着急回收,好比我昨天观察到的情况。一旦当系统闲下来后,内存释放回收工作就很快的在后台执行了。
由于不懂内部机制,只好从表面变化妄加推断了。各位有何见解?