日期:2014-05-18 浏览次数:21201 次
Class1自定义类 实现了IDisposable 接口 主要资源对象占用如下 Dictionary<string,MemoryStream> Files=new Dictionary<string,MemoryStream>(20); 接口实现如下 private bool IsDispose = false; /// <summary> /// 释放所有占用的资源 /// </summary> public void Dispose() { if (!IsDispose) { foreach (var v in files) { v.Value.Close(); v.Value.Dispose(); } Files.Clear(); Files = null; IsDispose = true; } } ***************以上是定义********************************************以下是应用********************* BackGroundWorker bgjob=new BackGroundWorker(); his.bgjob.WorkerReportsProgress = true; .... bgjob.RunWorkerAsync(); DoWork() { using(Class1 c1=new Class1()) { 执行一些操作。。。 内存迅速涨到150-160M }//此处使用using语句块 无效果内存仍然在 150M左右 GC.Collect();//此处调用GC默认 的东东 无效果 } 直到 bgjob 的Completed事件之后 内存仍让 居高不下, 调用多次则出现 内存继续上升 也就是说 我发现我的MemoryStream根本没有释放。。。 求指点。。。
using (MemoryStream stream = new MemoryStream()){ …… }
------解决方案--------------------
我的意思是既然你一直要用MemoryStream,就不要释放它,直到使用结束后再手动Close。
另外不知道WeakReference能不能帮到你
http://msdn.microsoft.com/zh-cn/library/system.weakreference.aspx
------解决方案--------------------
需要加上析构函数
~Class1()
{
Dispose(false);
}