社区
C#
帖子详情
请问c#,winform的虚拟内存怎么释放
Ellen88
2007-12-12 10:43:20
一个winform程序,大致框架是有一个MainForm,MainForm里有一个panel,每次点击菜单时,panel.controls.clear(),然后再在panel里加载需要的子窗体,每点击一次菜单,虚拟内存和内存都增加,现在通过empty.exe这个工具能将内存给释放掉,但是虚拟内存不知道怎么释放了,请大家给给建议。
...全文
1115
6
打赏
收藏
请问c#,winform的虚拟内存怎么释放
一个winform程序,大致框架是有一个MainForm,MainForm里有一个panel,每次点击菜单时,panel.controls.clear(),然后再在panel里加载需要的子窗体,每点击一次菜单,虚拟内存和内存都增加,现在通过empty.exe这个工具能将内存给释放掉,但是虚拟内存不知道怎么释放了,请大家给给建议。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
程序主动触发垃圾回收
释放
内存
本文介绍了一种在
C#
WinForm
程序中优化内存使用的方法,通过定时调用垃圾回收和刷新内存,解决长时间运行导致的内存飙高问题。特别针对未关闭Stream资源的情况,提出了解决方案。
C#
Winform
应用程序占用内存较大解决方法整理
本文深入探讨了
Winform
程序内存占用大的问题,并分享了通过使用性能测试工具、强制垃圾回收、优化代码编写等方法来降低内存占用的经验。通过实践案例,展示了如何在开发过程中有效减少系统内存消耗。
降低
Winform
占用系统内存的方法-将物理内存的占用挪到
虚拟内存
里
本文探讨了如何降低
C#
WinForm
程序的内存占用,通过使用SetProcessWorkingSetSize API,将物理内存占用转移到
虚拟内存
。尽管这种方法可能会导致系统性能下降,但在特定情况下,如程序启动后和即将闲置时,可以有效减少内存占用。同时,文章警告过度使用此方法可能对系统造成负面影响。
[
C#
] 内存占用
释放
本文介绍了一种方法来优化
C#
WinForm
程序的内存占用,通过使用一个计时器每隔几秒钟调用特定函数,可以将程序的物理内存尽可能转换为
虚拟内存
,从而减少硬盘读写,实现内存的高效利用。
C#
winform
客户端应用,32位支持大内存设定
本文详细介绍了32位系统中每个应用进程的4GB
虚拟内存
限制,并讲解了如何通过设置IMAGE_FILE_LARGE_ADDRESS_AWARE标志以及使用EditBin工具,使32位
C#
Winform
应用支持超过2GB的大内存。在64位系统下,可通过修改目标平台和设置首选32位选项实现,而在32位系统中,可能需要使用EditBin手动修改程序属性。同时,文章提供了自动修改的生成后事件命令行示例。
C#
111,129
社区成员
642,541
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章