首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

winform 内存优化!关闭窗口时,资源释放的有关问题,孤独的希望大家指导

2012-06-12 
winform 内存优化!关闭窗口时,资源释放的问题,孤独的希望大家指导C# winform程序,之前也来问过问题,因为,w

winform 内存优化!关闭窗口时,资源释放的问题,孤独的希望大家指导

  C# winform程序,之前也来问过问题,因为,winform直接从文本文件读数据,然后放在了内存中,因为有很多个窗口,没打开一个窗口时,可能就涉及到一些数组(我的数据源)的赋值,文本数据有200MB+,全部读到内存中去之后(已经是按照分组来读数据了) 发现此时程序占用了700MB+的内存,之后,在窗口上打开衍生出来的子窗体,占用内存进一步加大,随着打开越来越多的窗口,程序越来越慢,电脑越来越卡。

  不知道如何做优化。
  于是我想到一些方面,试了之后没效果,希望大家指导,我的基础很差;

1.是不是 我用局部变量来临时存储一些数据,方法结束之后,就应该会自动释放掉了?

2.关闭窗口时,我在formclosing里面删掉了该窗体产生的线程,还有把设计器中的Dispose放到了窗口类中,并且在 protected override void Dispose(bool disposing)中加了GC.Collect();,我想这样做,或者不用这样做,在关闭这个窗口的之后,系统是不是应该会释放它所占用的资源,可是观察了一下 任务管理器,冒失内存使用量一点就下降了3MB左右。难道我这样想是错的。
先就以上这些问题,欢迎大家给我讲解一下,谢谢啦!没分了,大家见谅

PS:我没使用数据库,我的数据源就是文本文件

[解决办法]

C# code
#region 清空内存        [DllImport("kernel32.dll")]        public static extern bool SetProcessWorkingSetSize(IntPtr process,            int minSize,            int maxSize            );        /// <summary>        /// 在占用大量内存的窗体关闭时执行,释放内存        /// </summary>        public static void FlushMemory()        {            GC.Collect();            GC.WaitForPendingFinalizers();            if (Environment.OSVersion.Platform == PlatformID.Win32NT)            {                FormFunction.SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);            }        }        #endregion
[解决办法]
既然你的数据已经读到内存中了,只是在开启子窗口时内存加大
应该是你也使用了同样的数据,并且是你主窗体中数据的副本
你可以用静态变量存放你的数据,它在内存中是只有一份的,这样在你开启子窗体时内存就不会涨的那么多
[解决办法]
.net的垃圾回收机制不是手动能控制的,你尝试下在子窗体里写个析构函数用来释放所声明的数组。

热点排行