社区
C#
帖子详情
请问c#,winform的虚拟内存怎么释放
Ellen88
2007-12-12 10:43:20
一个winform程序,大致框架是有一个MainForm,MainForm里有一个panel,每次点击菜单时,panel.controls.clear(),然后再在panel里加载需要的子窗体,每点击一次菜单,虚拟内存和内存都增加,现在通过empty.exe这个工具能将内存给释放掉,但是虚拟内存不知道怎么释放了,请大家给给建议。
...全文
1129
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
程序主动触发垃圾回收
释放
内存
参考:https://bbs.csdn.net/topics/300138657 参考:https://blog.csdn.net/yyws2039725/article/details/85480263
c#
的
winform
程序代码上的写法没有使用stream后不关闭的情况,但运行时间长了,会存在内存明显飙高,使用定时器定时调用以下方法,通知系统进行垃圾回收,并把不频繁使用的代码从物理内存放到磁盘
虚拟内存
中 /// <summary> /// 刷新内存 .
C#
Winform
应用程序占用内存较大解决方法整理
背景: 微软的 .NET FRAMEWORK 现在可谓如火如荼了。但是,.NET 一直所为人诟病的就是“胃口太大”,狂吃内存,虽然微软声称 GC 的功能和智能化都很高,但是内存的回收问题,一直存在困扰,尤其是
winform
程序,其主要原因是因为.NET程序在启动时,是需要由JIT动态编译并加载的,这个加载会把所有需要的资源都加载进来,很多资源是只有启动时才用的。 以XP 系统为例子
降低
Winform
占用系统内存的方法-将物理内存的占用挪到
虚拟内存
里
降低
Winform
占用系统内存的方法-将物理内存的占用挪到
虚拟内存
里 SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1)
[
C#
] 内存占用
释放
C#
出来的
Winform
程序内存占用默认比较大,这个方法可以极大优化程序内存占用。 其实吧,百度了下,这个函数是将程序的物理内存尽可能转换为
虚拟内存
,大大增加硬盘读写,是不好的。 用作存档,慎用!! 使用方法:在程序中用一个计时器,每隔几秒钟调用一次该函数,打开任务管理器,你会有惊奇的发现 附上代码: #region 内存回收
C#
winform
客户端应用,32位支持大内存设定
32位系统每个应用进程都会有自己独立的4GB内存空间,说的是每个进程有4GB的
虚拟内存
空间,而默认的32位应用当使用的物理内存达到2GB的时候就会报错System.OutOfMemoryException了。32位应用由于系统限制最高只能使用4GB内存,这是由最大寻址空间决定的,2的32次 方个地址寻址能力是从 0x00000000~0xFFFFFFFF 即为 4GB 大小的容量,实际还要区分用户区和内核预留区。进程可用的虚拟地址范围称为该进程的“虚拟地址空间” 。 每个用户模式进程都有其各自的专用虚拟地址
C#
111,128
社区成员
642,536
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章