黑马程序员技术交流社区
标题:
.net程序占用内存问题
[打印本页]
作者:
孙琦
时间:
2012-1-20 18:09
标题:
.net程序占用内存问题
为什么程序在启动的时候会占用很大的内存,当程序最小化的时候内存占用却很小,这之间发生了什么?
作者:
李荣壮
时间:
2012-1-20 20:22
启动的时候会对程序进行初始化,分配内存之类的处理,启动完成之后就消耗很少了,因为大多程序,你不对程序交互,程序就不会进行大量的运算,消耗会比启动的时候要少,当最小化时,操作系统应该会尝试优化内存占用吧,我想程序应该有个优先级吧,比如前台应该占用多,最小化次之,后台最少
作者:
孙琦
时间:
2012-1-20 21:00
李荣壮 发表于 2012-1-20 20:22
启动的时候会对程序进行初始化,分配内存之类的处理,启动完成之后就消耗很少了,因为大多程序,你不对程序 ...
嗯,交互是一个很重要的过程啊
作者:
杨磊
时间:
2012-2-1 23:56
进程的工作集是物理 RAM 内存中当前对该进程可见的内存页的集合。这些内存页是常驻内存,可供应用程序使用,而不会触发页面错误。工作集包括共享数据和私有数据。共享数据包括那些包含应用程序执行的所有指令的页(包括 .dll 文件和 system.dll 文件中的页)。随着工作集大小的增加,内存需求也增加。进程具有最小和最大的工作集大小。每次创建进程资源时,系统都会保留等于该进程最小工作集大小的内存量。虚拟内存管理器会尝试在进程处于活动状态时至少保留最小的常驻内存量,但决不会保留超过最大大小的内存量。
通过设置当前进程的MaxWorkingSet值来调整程序的内存占用:
public static void SetWorkingSet(int maxWorkingSet)
{
System.Diagnostics.Process.GetCurrentProcess().MaxWorkingSet
= (IntPtr)maxWorkingSet;
}
定义一个maxWorkingSet值:
int maxWorkingSet = 750000;
在窗体加载和窗体被停用时调用此静态方法:
private void Form1_Load(object sender, EventArgs e)
{
Working.SetWorkingSet(maxWorkingSet);
}
private void Form1_Deactivate(object sender, EventArgs e)
{
Working.SetWorkingSet(maxWorkingSet);
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2