private void button1_Click(object sender, EventArgs e)
{
StreamWriter sw = new StreamWriter("f://test.txt", true, Encoding.Default);
sw.WriteLine("ABCD");
sw.Flush();
sw.Close();
sw.Dispose();
}
每次执行都增加8k-10几k的内存资源,貌似那些所谓释放的命令都没什么效果,求大神们指点
解决方案 »
- 阿里巴巴数据抓取问题
- c#实现文件自动保存
- asp中 textbox这类控件是不是要过滤以防攻击?
- 一次更新多行数据的疑惑,求教
- 在调用存储过程返回dataset的时候用REF参数还是用OUT参数好?
- 使用c#能否编写输入法?能给一些流程或者参考资料吗?
- 如何将datagrid中选中的多条记录提取出来放到另外一个数据集中,我的代码怎么不行啊?谢谢!!
- 问HashTable, 和listView, combobox 等相关控件有效结合问题~
- 已知三个点的A,B,C位置,求三个点构成的三角形的内角分别的角度
- 高手指教,急
- 跪求获取某个http下所有文件的文件名,文件大小以及文件名的方法
- 请教大家,怎么获得一个应用程序上的输入框?
sw.Dispose();,执行一次之后,下次很可能就要报错了
StreamWriter,非托管资源。不是自动回收的。
using(StreamWriter sw = new StreamWriter("f://test.txt", true, Encoding.Default))
{
sw.WriteLine("ABCD");
}
试下
竟然不没结贴,自己也不知道去查一下
具有finalize method的对象在垃圾回收时,.NET先调用finalize method,然后再进行回收,具体处理如下:
a). 在heap创建具有finalize method的对象时,对象指针会放入finalization queue;
b). 垃圾回收时,具有finalize method的对象如果成为unreachable,则将其指针从finalization queue中移除,放入freachable queue,在本次垃圾回收处理中并不对这些对象进行回收;其它没有finalize method的unreachable对象正常回收。freachable queue中的对象是reachable的(它引用到的其他对象也都是reachable的)
c). 垃圾回收结束后,如果freachable queue非空,则一个专门的运行时线程finalizer thread被唤醒,它逐个调用freachable queue中对象的finalize method,然后将其指针从freachable queue中移除
d). 经过步骤c的处理之后,第二次垃圾回收时这些对象就成为unreachable,被正常回收
因为finalize method被设计用于非托管资源的释放,对这些资源的释放可能需要较长的时间,为了优化垃圾回收处理的性能,因此将调用finalize method专门交给一个独立的线程finalizer thread异步进行处理,这样也造成finalize method的对象需要经过2次垃圾回收处理0代和1代垃圾回收主要由阀值控制。初始时Gen 0 heap大小与CPU缓存的大小相关,运行时CLR根据内存请求状态动态调整Gen 0 heap大小,但Gen 0和Gen 1总大小保持在16M左右
Gen 2 heap和LOH都在full GC时进行回收,full GC主要由2类事件触发:
a). 进入Gen 2 heap和LOH的对象很多,超过了一定比例。RegisterForFullGCNotification的参数 maxGenerationThreshold、largeObjectHeapThreshold可以分别为Gen 2 heap和LOH设定这个值
b). 操作系统内存吃紧的时候。CLR会接收到操作系统内存紧张的通知消息,触发full GC
对于.net程序来说,一下子申请10M内存,这才比较靠谱。因为这可以保证系统一次申请的内存足够使用,不需要一点点地申请。至于你说一次增加8k内存资源,我不知道你从哪里看来的。这根本达到有必要清理的程度,就好像丰盛的一大桌子菜,如果客人吃完一点服务员就来清理一次桌面扫一次地,然后你们再继续回到桌上吃饭,这样的饭馆你敢啊?当然你希望它达到几十兆、上百兆,或者CPU有闲功夫的时候才去清理内存了啊。你们买不起几兆内存的话,那么应该换windows95以下的操作系统。