首页 新闻 会员 周边

winfrom占用内存过大,最小化后会释放很多内存,应怎样处理,防止内存占用过大

0
悬赏园豆:20 [待解决问题]

winfrom占用内存过大,最小化后会释放很多内存,应怎样处理,防止内存占用过大
写的程序才50多M,查了一下内存,占了60M左右,虚拟内存也占60m左右,最小化程序后内存只占了2m左右,虚拟内存基本没变,在最大化内存占用在10M左右,虚拟内存也没增加,如果运行一段时间,打开一些窗口内存增长很大,这是怎么回事,是不是关闭子窗体后没有立即释放内存,是不是要手动调用dispose方法释放内存。请高手指点。谢谢

gaowang的主页 gaowang | 初学一级 | 园豆:0
提问于:2011-08-15 09:02
< >
分享
所有回答(4)
0

Window Form程序占内存是比较大,只要不存在内存 泄露就行

窗体关闭时可以使用Dispose释放一些

2012 | 园豆:21230 (高人七级) | 2011-08-15 17:21
0

50多MB应该是正常的!提供一些建议,希望有所帮助!

1:对于模态窗体,要显式调用Dispose对资源进行释放

2:尽量避免创建同一窗口的多个实例,可考虑缓存

3:使用GC.Collect()强制回收资源

4:检查代码,看是否有内存泄露

刘少侠 | 园豆:290 (菜鸟二级) | 2011-08-19 17:00
0

#region 内存回收

[DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")]
public static extern int SetProcessWorkingSetSize(IntPtr process,
int minSize,
int maxSize
);

/// <summary>
/// 释放内存
/// </summary>
public static void ClearMemory()
{
GC.Collect();
GC.WaitForPendingFinalizers();
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
{
SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
}
}


#endregion

在最小化的时候调用一下就ok了

wccc | 园豆:242 (菜鸟二级) | 2013-04-09 10:15
0

你这个内存占用还好吧,只要对象不用的时候显示调用一下DISPOSE释放,GC会过段时间自动释放的

新的开始 | 园豆:679 (小虾三级) | 2014-08-09 00:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册