Board logo

标题: tw2.0占用内存太大了,可以使用SetProcessWorkingSetSize函数来整理内存,内详 [打印本页]

作者: tomz1    时间: 2007-3-5 17:41     标题: tw2.0占用内存太大了,可以使用SetProcessWorkingSetSize函数来整理内存,内详

可以定时清理,有效!

procedure ClearMemory;
begin
  if Win32Platform=VER_PLATFORM_WIN32_NT then begin
     SetProcessWorkingSetSize(GetCurrentProcess,$FFFFFFFF,$FFFFFFFF);
  end;
end;

[ 本帖最后由 tomz1 于 2007-3-5 17:42 编辑 ]
作者: wuyou331    时间: 2007-3-5 18:00

有这个必要时开发组会做的
而且觉不会用上面这么简单的代码
作者: lvjing79    时间: 2007-3-5 18:11

要是整理内存那么容易,大家都可以写随时清理内存的程序了,呵呵!
作者: ice2flash    时间: 2007-3-5 18:48

像我这样的编程入门者也知道这个函数,相信凤凰一定知道。不过如果凤凰不使用,一定是有自己的考虑!
作者: tomz1    时间: 2007-3-5 21:00

凤凰已经在用这个方法了,我的建议多余了

0046701D  /$  FF15 E4124000   CALL    [<&KERNEL32.GetCurrentProcess>]           ; [GetCurrentProcess
00467023  |.  85C0            TEST    EAX,EAX
00467025  |.  74 0B           JE      SHORT 00467032
00467027  |.  6A FF           PUSH    -1
00467029  |.  6A FF           PUSH    -1
0046702B  |.  50              PUSH    EAX
0046702C  |.  FF15 C4114000   CALL    [<&KERNEL32.SetProcessWorkingSetSize>]    ;  kernel32.SetProcessWorkingSetSize
作者: veenter    时间: 2007-3-5 22:19

你这段代码不是C++的!
作者: renior    时间: 2007-3-5 22:25

楼上的,那是楼主反编译的tw程序,是汇编语言
作者: tomz1    时间: 2007-3-5 23:30

我修改过的tw2.0版本,看图,压缩包里有修改过的执行文件,怕的人可以在虚拟机里用

[ 本帖最后由 tomz1 于 2007-3-5 23:32 编辑 ]
作者: 混神    时间: 2007-3-6 00:15

你竟然全都去掉了,要是留下收藏夹就好了~
作者: szweiming    时间: 2007-3-6 00:16

楼上的,不错,是个高手~~~~~~~~~
作者: 逸水魂    时间: 2007-3-6 08:08

不错,运行速度快多了,内存占用也明显减小了
作者: www56789www    时间: 2007-3-6 08:36

谢谢了,是快了!内存占用也明显减小了
作者: 000pengpeng    时间: 2007-3-6 09:04

不错不错,你也出个浏览器吧
作者: Conet    时间: 2007-3-6 10:14

lz你真的好厉害啊,真的不错嗳
作者: ggg_000_111    时间: 2007-3-6 10:18

提到汇编我就晕:七窍通了六窍了。
作者: lpgo    时间: 2007-3-6 10:30

有毛病!  我下了 楼主 修改的 浏览器 了

CPU   占用 大!  (内存占用 是少点)
作者: pmt    时间: 2007-3-6 10:38

斧头
作者: mutallsker    时间: 2007-3-6 10:46

提示: 作者被禁止或删除 内容自动屏蔽
作者: mutalisker    时间: 2007-3-6 10:48

楼主很强啊

对于这个函数,TW也一直在用,只不过是在关闭到最后一个标签的时候调用一次。因为这个函数频繁调用的唯一好处就是任务管理器里面看着小而已,并且频繁的调用好像还会导致很多不稳定因素的产生。
其实我挺恨这个函数的,就是由于有了这个函数,无数个软件都疯狂的调用它,然后站出来说:你看我,内存占用最小。
作者: tomz1    时间: 2007-3-6 10:49

我为了省事,只是在exe内部嵌入了一个时钟函数,定时清理,所以要占用了一些CPU
更好的方法是在网页完全打开后,执行一次清理就够了,这个要作者加入了
我只是软件的使用者,这个比马桶好
作者: mutallsker    时间: 2007-3-6 10:53

提示: 作者被禁止或删除 内容自动屏蔽
作者: tomz1    时间: 2007-3-6 10:53

tw2是在每关闭一个标签的时候,都会调用这个函数
作者: mutalisker    时间: 2007-3-6 10:53

对了,楼上的可以直接和我联系交流
e-mail:xiaoc@ioage.com
msn:xiaoc@live.com
作者: king_hh    时间: 2007-3-6 11:06

值得一赞,如果tw弄个选项就好了。
作者: king_hh    时间: 2007-3-6 11:24

用了一会儿感觉良好,很流畅,没有什么问题。good!
作者: easeking    时间: 2007-3-6 11:41

水一下
作者: phoenix    时间: 2007-3-6 14:28

又见这类版本,呵呵

对了,2.0春节版的下一个版本,访问多个页面后,再关闭,内存占用将比现在的版本有很大的下降 - 尤其是虚拟内存
还有优化了几个CPU占用率比较高的地方,请大家下个版本再看看

楼主说的这个函数,只能降低物理内存看起来的占用,它实际是把做了内存交换, 我们还是希望能深入内核和代码逻辑去降低内存占用,而不是简单的调用一句Windows API,然后把系统为此的开销推给用户去承担

当然,还是要谢谢楼主的热心
作者: 夜火燎原    时间: 2007-3-6 15:00

偶也下来试试~~支持楼主一个~
作者: fiction    时间: 2007-3-6 15:27

TW的内存比1.X的大的多~感觉
作者: gj13101    时间: 2007-3-6 16:17

内存是变得好小了
作者: fratre    时间: 2007-3-6 16:22

这个东西说实说只是起一个心理安慰的作用,带来的隐患则多多。
最大的一个问题就是让硬盘的读写频率加大了。
原来国内有个mim的im软件就用这个,结果因为交换过于频繁,软件非常不稳定
作者: lvjing79    时间: 2007-3-6 17:55

开发者说的很中肯,内存只是减少一点只是看起来好看,但未必会对用户的浏览体验带来更好!
作者: lpgo    时间: 2007-3-6 17:58

学习下
作者: wuyou331    时间: 2007-3-6 18:32

只是看起来而已。实际上不是如此
作者: tcbao    时间: 2007-3-6 18:48

试用了一下,占用内存少了,可虚拟内存多了!
加起来和没有修改的基本持平了!
作者: tcbao    时间: 2007-3-6 18:49

如果内存大,空出那么多也是浪费,还不如频繁读内存,而不是频繁读硬盘
作者: hayem    时间: 2007-3-6 20:20

不懂这个
作者: burning    时间: 2007-3-6 20:40

不懂


作者: backfire    时间: 2007-3-7 06:48

SetProcessWorkingSetSize()这个函数的应用要小心。 它固然可以改变应用程序的workset,也就是物理内存的占有。但是这个也是有代价的。 如果系统中其它的程序不变,当然没有问题; 但系统是动态的,而且还有其它程序在运行。 如果系统内存富裕,那么是否改变workset,值得商榷; 但如果系统内存紧张,那么改变workset,使得TW内存消耗减小,但随着打开网页的增加,对内存的需求又会改变,那么反过了反而消耗系统的资源(内存重新的划分,及CPU耗时判断及修正内存分配,都是资源的消耗),因此对性能的影响是显而易见的,而且时间长了,内存占有怕有又要回升。

就Windows本身而言,窗口的最小化,或者闲置等,系统都会调用这个SetProcessWorkingSetSize()函数,如果应用程序内部在调用的话, 有可能导致内存调整频繁,从而更影响系统整体性能。

而所谓内存碎片,则是另一个大的议题,三言两语怕说不清楚; 但系统内存和进程内存空间,还有物理内存是有所区别的, 每个进程的虚拟内存映射到真实的物理内存上,是一个非线性的过程,根本不是一一对应的, 因此所谓碎片说,不正确;但强行分配一大块内存,迫使系统paging,重新分配内存,因此反而在一定程度上达到了内存“清理”的过程。

因此我的观点是, 除非特别应用的需要,值得一定程度上接管内存策略;其它的应用还是让OS的sub系统各司其职吧。


btw,楼主也用Delphi的吗?
作者: bshkl    时间: 2007-3-7 11:12

支持20F和19F
没有必要这样做,有时间控件 一定会站CPU
像这样  即占了用户的内存,又占了CPU
频繁的强制的把内存  调入虚拟内存,  对硬盘来说还是伤害(和前期的BT差不多)

[ 本帖最后由 bshkl 于 2007-3-7 11:16 编辑 ]
作者: 寄托天下    时间: 2007-3-7 12:06

前一段不是快车闹得很厉害么?听说原来是使用了比特精灵的技术
作者: kangchu888    时间: 2007-3-7 13:27

原帖由 寄托天下 于 2007-3-7 12:06 发表
前一段不是快车闹得很厉害么?听说原来是使用了比特精灵的技术


发生什么事了 什么比特精灵的技术
作者: dapuli    时间: 2007-3-7 14:44

好用 高人佩服
作者: lpgo    时间: 2007-3-7 17:08

原帖由 寄托天下 于 2007-3-7 12:06 发表
前一段不是快车闹得很厉害么?听说原来是使用了比特精灵的技术

给讲下!  好奇着呢 !




欢迎光临 世界之窗论坛 (http://bbs.theworld.cn/) Powered by Discuz! 7.2