社区
C#
帖子详情
请问c#,winform的虚拟内存怎么释放
Ellen88
2007-12-12 10:43:20
一个winform程序,大致框架是有一个MainForm,MainForm里有一个panel,每次点击菜单时,panel.controls.clear(),然后再在panel里加载需要的子窗体,每点击一次菜单,虚拟内存和内存都增加,现在通过empty.exe这个工具能将内存给释放掉,但是虚拟内存不知道怎么释放了,请大家给给建议。
...全文
1062
6
打赏
收藏
请问c#,winform的虚拟内存怎么释放
一个winform程序,大致框架是有一个MainForm,MainForm里有一个panel,每次点击菜单时,panel.controls.clear(),然后再在panel里加载需要的子窗体,每点击一次菜单,虚拟内存和内存都增加,现在通过empty.exe这个工具能将内存给释放掉,但是虚拟内存不知道怎么释放了,请大家给给建议。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kbryant
2007-12-12
打赏
举报
回复
不懂帮顶
wsj1983920
2007-12-12
打赏
举报
回复
友情帮顶
Ellen88
2007-12-12
打赏
举报
回复
搞了一天,谢谢wsj1983920,kbryant捧场,各散20,谢谢LaoBai_2006的回答,散60,呵呵
Ellen88
2007-12-12
打赏
举报
回复
附带用Empty.exe释放内存的代码,empty.exe是Windowsxp和win2003自带的内存管理工具,只有40多K,很好用
System.Diagnostics.ProcessStartInfo p = null;
System.Diagnostics.Process Proc;
string path = System.IO.Directory.GetCurrentDirectory();
if (!File.Exists(path + "\\empty.exe"))
{
MessageBox.Show(System.IO.Directory.GetCurrentDirectory() + "\\empty.exe不存在");
}
p = new ProcessStartInfo(path + "\\empty.exe", "Hisign.ACS.Main.exe");
p.WorkingDirectory = path;//设置此外部程序所在windows目录
p.WindowStyle = ProcessWindowStyle.Hidden;//在调用外部exe程序的时候,控制台窗口不弹出
//如果想获得当前路径为
Proc = System.Diagnostics.Process.Start(p);//调用外部程序
System.Threading.Thread.Sleep(100);
Ellen88
2007-12-12
打赏
举报
回复
解决了,虽然没有完全消除,但增副不大,基本控制在31m虚拟内存左右
解决方案:
1,定义一个接口
public interface CustomForm
{
void EmptyRam();
System.Windows.Forms.Form currentForm { get; set; }
}
2,让窗体集成这个接口,在EmptyRam中释放和GC.Collect(),eg
public partial class AlarmForm : Form, Helper.CustomForm
{
public AlarmForm()
{
InitializeComponent();
p_current = this;
}
public static AlarmForm p_current = null;
public System.Windows.Forms.Form currentForm
{
get
{
return p_current;
}
set
{
p_current = (AlarmForm)value;
}
}
public void EmptyRam()
{
this.Dispose();
this.Close();
p_current = null;
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
3,在菜单click前调用窗体的EmptyRam方法,自定义form在_panel里
Helper.CustomForm customForm = (Helper.CustomForm)_panel.Controls[0];
customForm.EmptyRam();
LaoBai_2006
2007-12-12
打赏
举报
回复
不知我的思路是否有点跑题,不过照 lz 的描述,似乎应该 GC.Collect() 一下吧,强制进行垃圾回收。
详情参见
MSDN
。
虽说不知道对机器有多明显的效果,但至少能够使程序更有效地利用内存吧,我想。
C#
Winform
windows运行内存
释放
使用
C#
编写的
释放
系统运行内存的小程序
c#
源码
winform
VirtualDeskTop 虚拟桌面 多个桌面 适合开很多窗口的朋友 源码
c#
源码
winform
VirtualDeskTop 虚拟桌面 多个桌面 适合开很多窗口的朋友 源码
C#
winform
开发 DataGrid带筛选功能
C#
winform
开发中 DataGrid设计带有筛选功能!含源代码,值得一看!
C#
winform
做水晶报表
大家好 ,最近不是总有人问关于水晶报表吗?? 我这有一个和大家分享
最全的
c#
winform
ssk文件
本人在网上能够找到的所有的
c#
winform
ssk文件
C#
111,093
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章