标题:[zt]C#+API设置工作集(限制实际内存大小)-->静夜思转移
只看楼主
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
结帖率:66.67%
 问题点数:0 回复次数:2 
[zt]C#+API设置工作集(限制实际内存大小)-->静夜思转移

c#如何限制程序内存使用的大小

c#虽然内置垃圾回收机制,但是并不能解决程序占用内存庞大的问题,如果我们仔细观察任务管理器,我们会发现一个程序如果最小化的时候,它所占用的会骤然减小,这时操作系统会把程序用不到的内存暂时放到虚拟内存中,当我们再把程序最大化时,发现内存并没有完全的从虚拟内存调到内存中来,是因为操作系统的内存管理机制只调用目前需要的,那么剩下的,有可能将来调用,有可能根本没用。实现这个机理用到了一个API函数SetProcessWorkingSetSize(),c#中声明如下:
[DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")]
public static extern int SetProcessWorkingSetSize(int hProcess, int dwMinimumWorkingSetSize, int dwMaximumWorkingSetSize);
其中的参数内容:
hProcess:进程的句柄
dwMinimumWorkingSetSize:进程最小工作空间
dwMaximumWorkingSetSize:进程最大工作空间
其中的hProcess,在c#中,如果限制当前编译的程序,用GetCurrentProcess()来获得。
但是这么做有一点要注意,在一个程序中不宜经常使用这个函数,比方说,我为了减少我的程序内存占用,把dwMinimumWorkingSetSize、dwMaximumWorkingSetSize的值都设置为最小,然后在设置一个timer,每隔一会就调用这个函数一次,这样看来程序占用内存时间少了,但是它带来一个很严重的弊端,操作系统为了实现限制内存的大小,会不断的进行内存与虚拟内存之间的转换,反而大大加重了操作系统的负担,所以不宜常用。
大家可以运行一下周博通,然后看看任务管理器,用这个软件打开新浪网页,会发现任务管理器里面它的进程每5秒减少一次,而且是减少到最小,用的就是这个原理。


搜索更多相关主题的帖子: 内存 API 
2007-09-03 11:10
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
得分:0 

临时有用,先放着,占个位置


啊晕死,忙乱出错,发错地方了,麻烦斑竹或者管理员转去C#区

2007-09-03 11:10
随风云
Rank: 1
等 级:新手上路
威 望:1
帖 子:263
专家分:0
注 册:2007-6-28
得分:0 
能给个完整的例子吗?看的不怎么懂呢? 最好有源代码的

真的想象风一样去流浪!
2007-09-04 12:51



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-167342-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.919605 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved