A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙琦 黑马帝   /  2012-1-20 18:09  /  2230 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么程序在启动的时候会占用很大的内存,当程序最小化的时候内存占用却很小,这之间发生了什么?

3 个回复

倒序浏览
李荣壮 来自手机 黑马帝 2012-1-20 20:22:17
沙发
启动的时候会对程序进行初始化,分配内存之类的处理,启动完成之后就消耗很少了,因为大多程序,你不对程序交互,程序就不会进行大量的运算,消耗会比启动的时候要少,当最小化时,操作系统应该会尝试优化内存占用吧,我想程序应该有个优先级吧,比如前台应该占用多,最小化次之,后台最少
回复 使用道具 举报
李荣壮 发表于 2012-1-20 20:22
启动的时候会对程序进行初始化,分配内存之类的处理,启动完成之后就消耗很少了,因为大多程序,你不对程序 ...

嗯,交互是一个很重要的过程啊
回复 使用道具 举报
进程的工作集是物理 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);
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马