青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

yehao's Blog

SetProcessWorkingSetSize函數(shù)的騙局

轉(zhuǎn)http://blog.sina.com.cn/s/blog_49f8960e0100081x.html

我實(shí)在不愿意提起這個(gè)話題.后來(lái)在網(wǎng)上看到幾篇文章,深深感覺(jué)到,已經(jīng)有程序員站出來(lái),揭穿這個(gè)忽悠了千百萬(wàn)用戶的詭計(jì)了...
附2篇文章的地址:
http://blog.csdn.net/biku/archive/2006/07/06/886038.aspx
http://blog.csdn.net/zlt982001/archive/2005/08/28/466879.aspx
我這篇文章無(wú)非是歸納了幾篇文章的內(nèi)容,并深入的闡明惡意使用該技術(shù)帶來(lái)的壞處.
請(qǐng)一味追求低內(nèi)存軟件的用戶們注意了:什么才應(yīng)該是選擇軟件的主要因素.

物理內(nèi)存和虛擬內(nèi)存

物理內(nèi)存,在應(yīng)用中,自然是顧名思義,物理上,真實(shí)的插在板子上的內(nèi)存是多大就是多大了.看機(jī)器配置的時(shí)候,看的就是這個(gè)物理內(nèi)存.

如果執(zhí)行的程序很大或很多,就會(huì)導(dǎo)致物理內(nèi)存消耗殆盡.為了解決這個(gè)問(wèn)題,Windows中運(yùn)用了虛擬內(nèi)存技術(shù),即拿出一部分硬盤(pán)空間來(lái)充當(dāng)內(nèi)存使用,當(dāng)內(nèi)存占用完時(shí),電腦就會(huì)自動(dòng)調(diào)用硬盤(pán)來(lái)充當(dāng)內(nèi)存,以緩解內(nèi)存的緊張.

一個(gè)程序,不可避免地要用到虛擬內(nèi)存,因?yàn)椴活l繁執(zhí)行或者已經(jīng)很久沒(méi)有執(zhí)行的代碼,沒(méi)有必要留在物理內(nèi)存中,只會(huì)造成浪費(fèi);放在虛擬內(nèi)存中,等執(zhí)行這部分代碼的時(shí)候,再調(diào)出來(lái).
Windows 的任務(wù)管理器可以幫助我們看到進(jìn)程的虛擬內(nèi)存.調(diào)出任務(wù)管理器,點(diǎn)擊菜單“查看”-“選擇列”,在出現(xiàn)的窗口中,鉤上“虛擬內(nèi)存大小

一個(gè)程序到底應(yīng)該使用多少虛擬內(nèi)存呢?不一定,但是應(yīng)該以恰到好處的符合虛擬內(nèi)存原本作用為最好.
下面將揭穿表面看起來(lái)調(diào)用了大量圖片、大量運(yùn)行庫(kù)的程序,為什么才“占用”不到 1 MB 的內(nèi)存的詭計(jì).

原來(lái)是 SetProcessWorkingSetSize 函數(shù)

MSDN 對(duì)該函數(shù)的表述(翻譯):使用這個(gè)函數(shù)來(lái)設(shè)置應(yīng)用程序最小和最大的運(yùn)行空間,只會(huì)保留需要的內(nèi)存.當(dāng)應(yīng)用程序被閑置或系統(tǒng)內(nèi)存太低時(shí),操作系統(tǒng)會(huì)自動(dòng)調(diào)用這個(gè)機(jī)制來(lái)設(shè)置應(yīng)用程序的內(nèi)存.應(yīng)用程序也可以使用 VirtualLock 來(lái)鎖住一定范圍的內(nèi)存不被系統(tǒng)釋放;當(dāng)你加大運(yùn)行空間給應(yīng)用程序,你能夠得到的物理內(nèi)存取決于系統(tǒng),這會(huì)造成其他應(yīng)用程序降低性能或系統(tǒng)總體降低性能,這也可能導(dǎo)致請(qǐng)求物理內(nèi)存的操作失敗,例如:建立進(jìn)程,線程,內(nèi)核池,就必須小心的使用該函數(shù).

也就是說(shuō),該函數(shù)不是節(jié)省內(nèi)存,而是強(qiáng)制把進(jìn)程的物理內(nèi)存搬到虛擬內(nèi)存中.

另外有一些資料上說(shuō),該函數(shù)“將有可能導(dǎo)致缺頁(yè)中斷,嚴(yán)重影響性能”.
函數(shù)原型:
BOOL SetProcessWorkingSetSize(
HANDLE hProcess,
SIZE_T dwMinimumWorkingSetSize,
SIZE_T dwMaximumWorkingSetSize
);
我們用 VB 來(lái)做這么一個(gè)簡(jiǎn)單的例子,是程序占用 300 KB 內(nèi)存吧.

建立一個(gè)標(biāo)準(zhǔn)的 VB 工程,在 Form1 中放置一個(gè) Timer1 ,把 Interval 屬性設(shè)置為 1000 (即 1 秒).然后在代碼編輯框中輸入以下代碼:

Private Declare Function SetProcessWorkingSetSize Lib "kernel32" (ByVal hProcess As Long, ByVal dwMinimumWorkingSetSize As Long, ByVal dwMaximumWorkingSetSize As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Sub Timer1_Timer()
SetProcessWorkingSetSize GetCurrentProcess(), 50000, 100000
End Sub
然后生成 工程1.exe,執(zhí)行,調(diào)出任務(wù)管理器查看,發(fā)現(xiàn)內(nèi)存占用才 320 KB.如果把定時(shí)器關(guān)閉,這進(jìn)程的內(nèi)存一般 4 MB左右.
必須定時(shí)執(zhí)行該函數(shù),否則虛擬內(nèi)存會(huì)慢慢被調(diào)出來(lái),恢復(fù)原來(lái)的內(nèi)存大小.
如果要使一個(gè)本來(lái)需要占用大量?jī)?nèi)存的程序減低到幾百 KB ,使用同樣的方法即可.

詭計(jì)帶來(lái)的危害

如果 SetProcessWorkingSetSize 函數(shù)被正常使用,是非常有用處的.但是為了蒙騙用戶的眼睛,每秒,甚至幾十毫秒就把大量?jī)?nèi)存往虛擬內(nèi)存里面壓,就會(huì)帶來(lái)無(wú)可預(yù)計(jì)的危害.看看這篇文章怎么說(shuō):“因?yàn)樗皇菚簳r(shí)的將應(yīng)用程序占用的內(nèi)存移至虛擬內(nèi)存,一旦,應(yīng)用程序被激活或者有操作請(qǐng)求時(shí),這些內(nèi)存又會(huì)被重新占用.如果你強(qiáng)制使用該方法來(lái)設(shè)置程序占用的內(nèi)存,那么可能在一定程度上反而會(huì)降低系統(tǒng)性能,因?yàn)橄到y(tǒng)需要頻繁的進(jìn)行內(nèi)存和硬盤(pán)間的頁(yè)面交換.”.

沒(méi)錯(cuò),如果你使用了這類(lèi)軟件,意味著你的硬盤(pán)將每秒將 I/O 大量數(shù)據(jù);硬盤(pán)的磁針將拼命旋轉(zhuǎn)...(當(dāng)然硬盤(pán)磁針不可能不旋轉(zhuǎn)^_^,只是選擇得更厲害而已).

不是說(shuō) BT 很傷內(nèi)存嗎?不然,因?yàn)楝F(xiàn)在大多 BT 軟件都有緩存技術(shù).且看 Bitcomet 官方對(duì)緩存技術(shù)的說(shuō)明:“傳統(tǒng)BT高速下載時(shí)硬盤(pán)會(huì)響得很厲害,這是大量的隨機(jī)讀取造成的.... BitComet可以由用戶設(shè)置緩存大小.... 可以明顯地看出犧牲一小部分內(nèi)存作緩存對(duì)硬盤(pán)的保護(hù)作用.”

是不是有種心寒的感覺(jué)?一類(lèi)軟件寧愿犧牲內(nèi)存,也要減少保護(hù)硬盤(pán);而另外一類(lèi)軟件,卻為了欺騙用戶,讓CPU、硬盤(pán)更加奔波......

抓一個(gè)兇手

這類(lèi)軟件不少,我以其中一個(gè)桌面工具為例,揭穿它的假面具(不點(diǎn)名字了).運(yùn)行該軟件后,隨意操作一下,然后打開(kāi)進(jìn)程管理器,把虛擬內(nèi)存列調(diào)出來(lái),找到該進(jìn)程,如圖3:

OK,20 MB 虛擬內(nèi)存,而只有 632 KB 物理內(nèi)存.細(xì)心的你會(huì)發(fā)現(xiàn),大概每 1 秒,該行都有閃爍的感覺(jué),沒(méi)錯(cuò),這正是每秒調(diào)用 SetProcessWorkingSetSize 的結(jié)果.另外,我們打開(kāi) Norton Process Viewer ,查看該進(jìn)程的 CPU 占用情況,如圖4:

可以看到,就算沒(méi)有操作該軟件,但是每秒,都有 3% 的CPU占用起伏(雖然這并不能說(shuō)明什么).另外,內(nèi)存框中可以看到物理內(nèi)存和虛擬內(nèi)存的占用,兩者相去甚遠(yuǎn).此外,可以用 Hook API 技術(shù)來(lái)證明每秒調(diào)用 SetProcessWorkingSetSize 的行為.

應(yīng)該怎么做

這篇文章只想讓用戶了解軟件占用資源的實(shí)際.而程序員應(yīng)該把下功夫,真正從代碼中減少內(nèi)存的消耗,而不是一味忽悠用戶.調(diào)用 SetProcessWorkingSetSize 會(huì)帶來(lái)某些好處,但是何時(shí)調(diào)用、如何調(diào)用應(yīng)該符合兩個(gè)要求:
1,在程序暫時(shí)不被使用的時(shí)候(例如最小化);
2,物理內(nèi)存和虛擬內(nèi)存應(yīng)處于一個(gè)合適的比例(而不是 600 KB 比 20 MB 這么荒唐);
3,或者不調(diào)用,讓 Windows 去處理.

posted on 2013-05-21 20:02 厚積薄發(fā) 閱讀(4771) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): Windows編程

導(dǎo)航

<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

統(tǒng)計(jì)

常用鏈接

留言簿

隨筆分類(lèi)

文章分類(lèi)

文章檔案

搜索

最新評(píng)論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲欧美视频在线| 亚洲电影免费在线| 亚洲小少妇裸体bbw| 亚洲视频 欧洲视频| 欧美激情成人在线| 欧美亚洲综合久久| 亚洲精品免费观看| 91久久久在线| 91久久精品国产91性色| 久久亚洲国产精品日日av夜夜| 国产精品video| 亚洲一区综合| 狂野欧美性猛交xxxx巴西| 久久人人97超碰精品888| 亚洲激情电影在线| 性色av一区二区三区| 国产精品久久久久一区| 亚洲小视频在线| 亚洲国产欧美精品| 欧美精品久久久久久久| 一本一本久久a久久精品综合麻豆| 欧美成人精品不卡视频在线观看| 久久国产精品久久精品国产| 亚洲欧洲久久| 亚洲第一天堂av| 亚洲伦理在线免费看| 欧美护士18xxxxhd| 亚洲婷婷在线| 亚洲综合精品自拍| 久久理论片午夜琪琪电影网| 亚洲免费在线看| 欧美不卡视频| 国产精品素人视频| 亚洲欧美激情一区| 亚洲人屁股眼子交8| 欧美在线视频a| 亚洲剧情一区二区| 久久夜色精品国产欧美乱极品| 久久综合一区二区| 欧美色视频在线| 亚洲精品三级| 久久精品综合| 亚洲精品久久久久久久久久久久久| 久久久久久亚洲精品中文字幕 | 久久精品电影| 蜜臀久久99精品久久久久久9| 亚洲人久久久| 欧美三级网址| 午夜久久久久| 久久综合九色九九| 亚洲人成人99网站| 欧美日韩国产精品自在自线| 一区二区三区四区五区在线| 午夜精品久久一牛影视| 国产一区二区在线观看免费| 久久激五月天综合精品| 美女黄色成人网| 亚洲精选成人| 国产欧美日韩亚洲| 亚洲国产日韩精品| 欧美三级黄美女| 欧美在线视频一区二区| 亚洲人成在线观看| 校园激情久久| 亚洲美女免费精品视频在线观看| 国产精品国产自产拍高清av王其 | 久久亚洲春色中文字幕久久久| 欧美国产日本在线| 欧美亚洲免费高清在线观看| 亚洲国产婷婷香蕉久久久久久| 欧美日韩综合另类| 欧美激情精品久久久久久变态| 亚洲砖区区免费| 夜夜嗨av一区二区三区网站四季av| 久久久久.com| 欧美综合第一页| 午夜精品久久久久久久久 | 亚洲三级视频| 激情久久五月| 一色屋精品亚洲香蕉网站| 国产精品日韩欧美一区| 欧美日韩直播| 国产精品国产三级国产普通话99 | 欧美有码在线视频| 亚洲一区精彩视频| 亚洲一区二区三区三| 亚洲精品日韩综合观看成人91| av不卡免费看| 欧美一区二区视频在线| 欧美资源在线| 欧美高潮视频| 国产精品99久久久久久久久久久久 | 亚洲大片免费看| 亚洲九九精品| 欧美日韩亚洲国产精品| 99精品国产在热久久下载| 亚洲免费观看视频| 国产精品久久久一区二区| 午夜日韩av| 久久久久青草大香线综合精品| 在线观看成人av| 亚洲精品欧洲| 国产一区二区无遮挡| 欧美不卡视频一区发布| 欧美日韩国产色视频| 欧美亚洲视频在线看网址| 久久视频国产精品免费视频在线| 亚洲成色777777在线观看影院| 欧美成人在线免费视频| 欧美日韩无遮挡| 免费成人黄色av| 国产精品久久午夜夜伦鲁鲁| 久久综合网色—综合色88| 欧美日韩亚洲视频一区| 久久久夜色精品亚洲| 欧美日韩国产免费| 欧美**人妖| 国内成人在线| 亚洲欧美日韩一区在线观看| 亚洲国产精品一区二区第一页 | 亚洲一区日韩| 久久综合狠狠综合久久激情| 亚洲在线网站| 国产日韩欧美一区| 欧美日韩国产限制| 牛人盗摄一区二区三区视频| 国产精品久在线观看| 亚洲免费大片| 一本色道久久88综合日韩精品| 久久伊人免费视频| 国产精品视频免费观看| 日韩亚洲精品电影| 亚洲免费不卡| 欧美日本一区| 国产精品99久久久久久宅男| 艳女tv在线观看国产一区| 欧美成人69| 亚洲精品激情| 午夜精品成人在线| 国产精品久久久久aaaa| 99在线精品免费视频九九视| 一区二区福利| 国产精品狼人久久影院观看方式| 亚洲影院免费观看| 欧美综合77777色婷婷| 在线观看日韩av电影| 欧美不卡高清| 亚洲自拍都市欧美小说| 久久蜜臀精品av| 99精品欧美一区| 国产精品女人网站| 久久久久成人精品免费播放动漫| 欧美国产乱视频| 亚洲欧美清纯在线制服| 国产精品一区二区视频| 两个人的视频www国产精品| 99在线视频精品| 久久成人免费视频| 日韩午夜视频在线观看| 国产自产精品| 国产精品高潮视频| 久久亚洲私人国产精品va媚药| 99精品热视频只有精品10| 久久亚洲二区| 久久国产精品高清| 亚洲一区在线直播| 最新日韩在线| 狠色狠色综合久久| 国产精品美女久久久久久2018 | 亚洲欧美日韩精品久久| 亚洲大胆美女视频| 国产一区日韩一区| 国产精品一区二区女厕厕| 欧美日韩在线播放三区四区| 久久久噜噜噜久久中文字幕色伊伊 | 久久人人爽爽爽人久久久| 99亚洲视频| 一区二区三区不卡视频在线观看 | 国产麻豆91精品| 欧美国产日本| 欧美日韩精品在线播放| 欧美成人按摩| 欧美日韩视频在线一区二区观看视频| 欧美成在线观看| 欧美日韩三级在线| 欧美午夜不卡影院在线观看完整版免费| 欧美极品一区二区三区| 欧美日韩亚洲一区| 国产三区二区一区久久| 国精产品99永久一区一区| 一区二区三区无毛| 亚洲黄一区二区| 亚洲欧美网站| 欧美国产日韩一区二区在线观看| 亚洲第一网站| 亚洲女优在线| 欧美黑人国产人伦爽爽爽| 国产精自产拍久久久久久蜜| 亚洲福利免费| 欧美一区二区视频免费观看|