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

yehao's Blog

SetProcessWorkingSetSize函數的騙局

http://blog.sina.com.cn/s/blog_49f8960e0100081x.html

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

物理內存和虛擬內存

物理內存,在應用中,自然是顧名思義,物理上,真實的插在板子上的內存是多大就是多大了.看機器配置的時候,看的就是這個物理內存.

如果執行的程序很大或很多,就會導致物理內存消耗殆盡.為了解決這個問題,Windows中運用了虛擬內存技術,即拿出一部分硬盤空間來充當內存使用,當內存占用完時,電腦就會自動調用硬盤來充當內存,以緩解內存的緊張.

一個程序,不可避免地要用到虛擬內存,因為不頻繁執行或者已經很久沒有執行的代碼,沒有必要留在物理內存中,只會造成浪費;放在虛擬內存中,等執行這部分代碼的時候,再調出來.
Windows 的任務管理器可以幫助我們看到進程的虛擬內存.調出任務管理器,點擊菜單“查看”-“選擇列”,在出現的窗口中,鉤上“虛擬內存大小

一個程序到底應該使用多少虛擬內存呢?不一定,但是應該以恰到好處的符合虛擬內存原本作用為最好.
下面將揭穿表面看起來調用了大量圖片、大量運行庫的程序,為什么才“占用”不到 1 MB 的內存的詭計.

原來是 SetProcessWorkingSetSize 函數

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

也就是說,該函數不是節省內存,而是強制把進程的物理內存搬到虛擬內存中.

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

建立一個標準的 VB 工程,在 Form1 中放置一個 Timer1 ,把 Interval 屬性設置為 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,執行,調出任務管理器查看,發現內存占用才 320 KB.如果把定時器關閉,這進程的內存一般 4 MB左右.
必須定時執行該函數,否則虛擬內存會慢慢被調出來,恢復原來的內存大小.
如果要使一個本來需要占用大量內存的程序減低到幾百 KB ,使用同樣的方法即可.

詭計帶來的危害

如果 SetProcessWorkingSetSize 函數被正常使用,是非常有用處的.但是為了蒙騙用戶的眼睛,每秒,甚至幾十毫秒就把大量內存往虛擬內存里面壓,就會帶來無可預計的危害.看看這篇文章怎么說:“因為他只是暫時的將應用程序占用的內存移至虛擬內存,一旦,應用程序被激活或者有操作請求時,這些內存又會被重新占用.如果你強制使用該方法來設置程序占用的內存,那么可能在一定程度上反而會降低系統性能,因為系統需要頻繁的進行內存和硬盤間的頁面交換.”.

沒錯,如果你使用了這類軟件,意味著你的硬盤將每秒將 I/O 大量數據;硬盤的磁針將拼命旋轉...(當然硬盤磁針不可能不旋轉^_^,只是選擇得更厲害而已).

不是說 BT 很傷內存嗎?不然,因為現在大多 BT 軟件都有緩存技術.且看 Bitcomet 官方對緩存技術的說明:“傳統BT高速下載時硬盤會響得很厲害,這是大量的隨機讀取造成的.... BitComet可以由用戶設置緩存大小.... 可以明顯地看出犧牲一小部分內存作緩存對硬盤的保護作用.”

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

抓一個兇手

這類軟件不少,我以其中一個桌面工具為例,揭穿它的假面具(不點名字了).運行該軟件后,隨意操作一下,然后打開進程管理器,把虛擬內存列調出來,找到該進程,如圖3:

OK,20 MB 虛擬內存,而只有 632 KB 物理內存.細心的你會發現,大概每 1 秒,該行都有閃爍的感覺,沒錯,這正是每秒調用 SetProcessWorkingSetSize 的結果.另外,我們打開 Norton Process Viewer ,查看該進程的 CPU 占用情況,如圖4:

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

應該怎么做

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

posted on 2013-05-21 20:02 厚積薄發 閱讀(4772) 評論(0)  編輯 收藏 引用 所屬分類: Windows編程

導航

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

統計

常用鏈接

留言簿

隨筆分類

文章分類

文章檔案

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲另类自拍| 麻豆freexxxx性91精品| 99精品视频免费全部在线| 欧美视频在线免费| 午夜精品视频在线观看一区二区| 在线亚洲成人| 国产综合色精品一区二区三区| 久久综合九色九九| 狠狠色狠狠色综合| 欧美日韩国产黄| 欧美一区亚洲二区| 亚洲精品一区二区三区在线观看| 性欧美超级视频| 一区二区三区产品免费精品久久75 | 中文在线不卡视频| 国内精品一区二区| 欧美黄网免费在线观看| 香蕉成人久久| 99热精品在线| 亚洲精品社区| 亚洲国产成人av好男人在线观看| 性刺激综合网| 香蕉成人久久| 亚洲欧美另类国产| 亚洲精品影院| 欧美大片一区| 亚洲国产欧美日韩| 亚洲激情一区| 欧美一级久久久| 久久久久国产精品人| 狠狠色狠狠色综合| 在线观看一区二区精品视频| 影音先锋久久久| 亚洲高清在线播放| 亚洲精品一二三| 日韩网站在线观看| 亚洲精品视频免费观看| 99国产精品国产精品久久| 99国产精品久久久久老师| 日韩视频免费看| 国产精品久久午夜| 玖玖玖免费嫩草在线影院一区| 欧美阿v一级看视频| 99在线观看免费视频精品观看| 欧美性一二三区| 久久精品免视看| 夜夜嗨av一区二区三区四季av| 欧美一区二区性| 一区二区日韩| 黄色日韩精品| 国产精品视频1区| 欧美精品在线播放| 亚洲欧美日韩人成在线播放| 亚洲国产精品一区二区第一页 | 亚洲视频999| 欧美激情一区二区三区成人| 欧美一级大片在线观看| 日韩一级片网址| 一区在线影院| 国产美女精品免费电影| 欧美精品久久天天躁| 久久久av毛片精品| 欧美一级夜夜爽| 性色av一区二区三区在线观看| 亚洲美女精品成人在线视频| 欧美成人综合网站| 欧美专区中文字幕| 国产在线日韩| 久久国产精品一区二区三区| 亚洲免费播放| 国产精品成人国产乱一区| 亚洲图片欧美一区| 夜夜嗨一区二区| 欧美日韩在线免费视频| 亚洲香蕉网站| 午夜精品免费视频| 国产亚洲欧美在线| 蜜臀a∨国产成人精品| 久久久午夜视频| 亚洲青色在线| 一区二区三区成人| 国产精品欧美日韩一区二区| 欧美在线一级视频| 久久精品卡一| 99精品国产在热久久下载| 中日韩男男gay无套| 国产亚洲一区二区精品| 欧美v国产在线一区二区三区| 女人天堂亚洲aⅴ在线观看| 亚洲美女一区| 久久福利精品| 亚洲欧美国产制服动漫| 欧美aa国产视频| 在线免费精品视频| 久久成人精品视频| 亚洲美女色禁图| 久久久精品tv| 亚洲视频1区| 蜜桃av一区| 欧美在线你懂的| 欧美日韩综合不卡| 亚洲黄色天堂| 亚洲第一黄网| 久久久久久色| 久久久噜噜噜| 国内精品国产成人| 亚洲一区二区三区涩| 国产在线播放一区二区三区| 欧美诱惑福利视频| 欧美在线啊v一区| 国语精品一区| 欧美成人精品三级在线观看| 欧美一区在线看| 亚洲黄色在线| 99国产一区| 国产一区在线播放| 欧美国产日韩a欧美在线观看| 欧美大片在线观看| 一本色道综合亚洲| 午夜影视日本亚洲欧洲精品| 一色屋精品视频在线观看网站| 欧美国产在线视频| 欧美日韩一区二区在线观看| 欧美一区二区视频在线| 久久精品一本| 亚洲另类自拍| 久久久av网站| 亚洲欧美日韩在线播放| 久久久夜夜夜| 午夜久久久久久久久久一区二区| 久久久美女艺术照精彩视频福利播放 | 国产欧美日韩中文字幕在线| 亚洲高清资源| 影音先锋中文字幕一区二区| 艳妇臀荡乳欲伦亚洲一区| 亚洲国产91色在线| 国产精品成人av性教育| 久久国产欧美精品| 日韩午夜在线观看视频| 欧美一区二区三区免费视频| 亚洲高清在线观看| 国产精品香蕉在线观看| 欧美高清视频在线 | 欧美一区日本一区韩国一区| 亚洲欧洲日产国产网站| 国产精品嫩草99a| 麻豆精品网站| 小黄鸭精品密入口导航| 亚洲精品在线免费观看视频| 久久久一区二区三区| 亚洲综合色婷婷| 91久久精品美女高潮| 国模大胆一区二区三区| 国产精品国产三级国产| 欧美乱妇高清无乱码| 欧美sm视频| 久久成人免费日本黄色| 性色av一区二区三区红粉影视| 日韩一二三在线视频播| 日韩视频在线观看免费| 亚洲国产成人av| 在线一区日本视频| 国产一区二区在线观看免费| 久久婷婷国产综合精品青草| 日韩午夜电影av| 久久香蕉国产线看观看av| 日韩小视频在线观看| 国产色产综合产在线视频| 久久视频国产精品免费视频在线| 美日韩精品视频免费看| 欧美日韩亚洲一区二| 国产精品综合久久久| 亚洲国产高清自拍| 亚洲天堂av综合网| 久久久精品2019中文字幕神马| 欧美激情一区二区三区在线视频观看| 亚洲福利精品| 欧美亚洲一区二区三区| 欧美国产高潮xxxx1819| 国产欧美日本| 中文成人激情娱乐网| 亚洲国产成人在线播放| 国模私拍一区二区三区| 国产一级揄自揄精品视频| 国产精品综合| 国产一区二区三区精品欧美日韩一区二区三区 | 欧美日韩日本国产亚洲在线| 久久人人97超碰精品888| 亚洲综合视频网| 亚洲性夜色噜噜噜7777| 亚洲黄色三级| 99热精品在线| 亚洲天堂成人在线视频| 一级日韩一区在线观看| 一本色道久久综合亚洲精品小说 | 一区二区三区在线视频观看| 国产主播喷水一区二区| 一区精品久久| 亚洲国产午夜| 91久久精品美女高潮|