日期:2014-05-18 浏览次数:21390 次
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);
}