smartdata
16326
|
2005/7/14 11:51:29 |
今天下载使用了一下,内存的减少非常明显,虚拟内存的占用没有什么改变。但一旦程序从后台转为前台时,内存会缓慢上去。由于内存增长速度非常缓慢导致程序几乎会死掉。 我是写的一个读取ERP运行日志的程序,日志记录超过10万条且全部读到客户端。未使用该方法时,内存和虚拟内存方别在130MB和146MB,使用后则分别为500KB和146MB,且500KB还会继续下降 |
sunny3super
10851
|
2004/12/23 14:55:15 |
好象我直接在MAIN文件中USES了它,它就生效了,为什么。 |
sunny3super
10850
|
2004/12/23 14:45:11 |
怎么使用呢????? 郁闷. |
traveller
10351
|
2004/12/9 21:01:16 |
不用困惑,wr960204是对的,我对这个函数也比较熟悉,实际上在日常工作中它几乎感觉不到任何副作用。 它主要对运行了很长时间的大型服务器程序会有一些影响,比如Web服务器之类。 大家可以阅读一下MSDN中的说明。 调用这个函数之后能在任务管理器中看到其占用内存逐步减小而不是一次性减小。 我的理解是,这个函数主要影响的是Windows的内存分配策略,所以不是立即见效的。 如果你的程序本来占用10M内存,而你用SetProcessWorkingSetSize把它下限改为500K,上限改为800K,那么效果取决于你机器的空闲内存数。 假设机器的空闲物理内存数为700K,而你的进程是前台进程,那么系统会把这700K物理内存全都供你使用,如果你的进程是后台进程,那么系统会给你保留500K的物理内存。 假设现在机器的空闲物理内存数足够所有进程使用,那么系统会优先为前台进程保留工作集上限的物理内存,然后根据后台进程的MinWorkingSetSize的大小来按比例保留物理内存。 所以,如果一个进程的的MaxWorkingSetSize过大,则当它激活的时候,后台程序将不得不访问磁盘交换文件,系统整体效率降低。如果一个进程的MinWorkingSetSize过大,那么当它处于非激活状态的时候,仍然会占用很多内存,导致前台程序不得不访问磁盘交换文件。而两者过小的话,通常不会影响整个系统的效率,只是自己的在系统内存分配体系中容易被“冷落”。 一些长期驻留系统的程序,定时缩小自己的工作集是比较“礼貌”的行为。 |
wr960204
10251
|
2004/12/6 22:55:03 |
我也不想在这里开辩论会。 大家用了,或看看Windows的内存管理资料心里自有公论。 |
wyb_star
10238
|
2004/12/6 16:00:19 |
还有一点我要提的,并不是说硬盘狂闪就说明是在使用虚拟内存,这只是其中的一种情况! 实践是检验真理的唯一标准!
我不多说了,到底谁对谁错,谁用谁知道! :) |
wyb_star
10236
|
2004/12/6 15:50:00 |
呵呵,就是闪了我才和你提的!另外虚拟内存并非是物理内存不够了才用的,道理我也不说了,你自已到任务管理器的进程页看看就知道我说的对不对了! |
wr960204
10219
|
2004/12/6 11:30:33 |
我觉得无需和你解释虚拟内存的道理。你自己安装上看看硬盘闪不闪不就知道了 |
wyb_star
10212
|
2004/12/6 9:01:16 |
wr960204: 如果你的程序本来占用10M内存,你用SetProcessWorkingSetSize把它改成500多K了,硬盘当然会闪了,除非你的程序只占用1~2M左右内存,我说这话是有依据的,我没见过你这个控件以前就试过这段代码(从CSDN的Blog上拷下来的),我把它放在我一个占用20多M的项目中,硬盘灯一直没有停过,而放在一个空项目中就没有出现这种情况,你要不信可以试试。这种节省内存的方法是不可取的。 |
wr960204
10166
|
2004/12/4 14:43:18 |
To wyb_star 如果你对虚拟内存技术了解一点的话就知道只有内存不够用的时候硬盘才会狂闪。 这个插件是整理回收内存的。怎么会引起硬盘狂闪 |
chenliang_820
10073
|
2004/12/2 9:11:41 |
为什么我不能安装呢? 能不能指点一下! |
fly_hong_924
10026
|
2004/11/30 22:16:02 |
Windows98那又将如何处理?这个只适用于Nt、2K XP 啊。 |
hc0007
9968
|
2004/11/29 9:11:56 |
好东西~ 我要把代码提出来放到自己的程序里 |
wyb_star
9966
|
2004/11/29 8:43:48 |
兄弟,你也太狠了吧,你这么内存到省了,时间一长硬盘可就哗哗响了! |
whxiejun
9951
|
2004/11/28 11:07:21 |
对于机器配置较低的用户来说真是个不错的好东东 |
zzybbs
9949
|
2004/11/28 10:32:28 |
if Win32Platform = VER_PLATFORM_WIN32_NT then begin //整理内存 SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF); end; |
liumazi
9945
|
2004/11/27 22:45:46 |
专门整理Delphi的内存的啊?这么好啊?下了看看哦. |