BackGroundWorker 组件 内存释放问题
- C# code
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根本没有释放。。。求指点。。。
[解决办法]
内存的释放与否,即使你有用Collect也不能直接释放
[解决办法]
1.MemoryStream已经实现了IDisposable接口,所以你用的时候应该
- C# code
using (MemoryStream stream = new MemoryStream()){ …… }
[解决办法]
我的意思是既然你一直要用MemoryStream,就不要释放它,直到使用结束后再手动Close。
另外不知道WeakReference能不能帮到你
http://msdn.microsoft.com/zh-cn/library/system.weakreference.aspx
[解决办法]
需要加上析构函数
~Class1()
{
Dispose(false);
}