读书人

BackGroundWorker 组件 内存释放有关问

发布时间: 2012-04-03 12:38:19 作者: rapoo

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);
}

读书人网 >C#

热点推荐