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

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>
            羞羞色国产精品| 久久免费黄色| 亚洲伦理在线观看| 久久爱另类一区二区小说| 一区二区欧美亚洲| 快射av在线播放一区| 欧美一区二区三区在线| 欧美日韩在线播放三区四区| 女人色偷偷aa久久天堂| 国产性天天综合网| 亚洲一区久久久| 亚洲欧美一区二区原创| 欧美日韩黄色大片| 亚洲国产另类 国产精品国产免费| 国产欧美韩国高清| 亚洲男人的天堂在线aⅴ视频| 99视频精品全部免费在线| 免播放器亚洲| 欧美高清视频一区二区三区在线观看 | 亚洲免费观看高清在线观看| 亚洲第一在线视频| 久久久亚洲人| 免费av成人在线| 亚洲成在人线av| 久久久久久久性| 美日韩丰满少妇在线观看| 一区二区三区在线视频免费观看| 欧美一级淫片播放口| 久久精品国产欧美激情| 国产一区二区成人| 久久激情综合| 欧美激情偷拍| 夜夜嗨av一区二区三区四季av| 欧美精品一区二区三区蜜桃| 亚洲精品偷拍| 午夜国产精品影院在线观看| 国产乱码精品1区2区3区| 亚洲欧美在线视频观看| 另类欧美日韩国产在线| 91久久国产综合久久蜜月精品| 欧美成人精品影院| 99v久久综合狠狠综合久久| 午夜精品福利视频| 黄色日韩网站视频| 欧美国产免费| 亚洲午夜电影| 久久综合九色综合网站| 亚洲精品国产无天堂网2021| 欧美视频一区二区三区| 欧美与黑人午夜性猛交久久久| 麻豆久久精品| 亚洲天堂久久| 国内免费精品永久在线视频| 欧美大片免费观看| 亚洲欧美成人综合| 欧美电影免费观看| 午夜精品久久久久久久久久久久| 国内成人自拍视频| 欧美日韩免费高清一区色橹橹| 亚洲欧美另类中文字幕| 欧美激情aaaa| 午夜在线观看欧美| 亚洲欧洲三级| 国产日韩av高清| 欧美精品系列| 欧美中文日韩| 一本综合精品| 欧美国产精品一区| 欧美一区二区三区久久精品茉莉花 | 国产在线国偷精品产拍免费yy| 欧美成人有码| 欧美在线观看一区二区| 亚洲三级影片| 欧美成年人视频| 午夜宅男欧美| 一区二区三区免费看| 影音欧美亚洲| 国产日韩欧美在线观看| 欧美日韩三级一区二区| 久久综合图片| 欧美诱惑福利视频| 亚洲午夜视频在线| 亚洲精品四区| 欧美激情一区在线| 久久视频国产精品免费视频在线| 亚洲私人影吧| 99国产精品久久久久久久久久| 伊人久久久大香线蕉综合直播 | 欧美日韩在线影院| 蜜臀va亚洲va欧美va天堂| 欧美一区二区三区四区在线观看地址 | 这里只有精品视频在线| 91久久在线视频| 欧美成人国产一区二区| 久久久久国内| 久久精品综合网| 欧美一级免费视频| 亚洲欧美视频在线观看| 亚洲一区二区高清| 亚洲一区二区三区四区视频| 999在线观看精品免费不卡网站| 亚洲国产精品一区制服丝袜| 国内一区二区三区在线视频| 国产乱码精品一区二区三区忘忧草 | 99国产精品视频免费观看| 91久久一区二区| 亚洲国产精品第一区二区| 欧美成人69av| 欧美高清日韩| 亚洲二区在线| 亚洲黄色片网站| 亚洲欧洲综合另类| 亚洲精品人人| av成人免费| 亚洲综合色视频| 午夜在线观看欧美| 欧美在线播放| 老司机精品视频一区二区三区| 老巨人导航500精品| 欧美福利一区二区| 欧美日韩亚洲一区二区三区| 欧美日韩小视频| 国产伦精品一区二区三区高清| 国产日韩精品一区二区三区| 韩国欧美国产1区| 亚洲精品国产精品国自产观看浪潮| 亚洲麻豆国产自偷在线| 亚洲视频网在线直播| 久久国产精品色婷婷| 久久综合激情| 亚洲精品一区在线| 亚洲欧美日韩精品一区二区| 久久精品国产欧美激情 | 久久午夜电影网| 欧美成人a视频| 国产精品久99| 狠狠色2019综合网| av成人福利| 久久久噜噜噜久久| 亚洲国产另类精品专区| 亚洲综合色噜噜狠狠| 玖玖精品视频| 国产精品久久久久久福利一牛影视| 国产视频在线观看一区二区| 亚洲国产一区二区视频| 亚洲欧美韩国| 欧美激情一区二区三区在线| 亚洲午夜av电影| 免费视频一区二区三区在线观看| 欧美视频免费在线| 亚洲丰满在线| 欧美一区二区三区另类 | 欧美激情中文字幕一区二区| 国产精品久久久久久久一区探花| 有码中文亚洲精品| 午夜在线精品偷拍| 亚洲精品乱码久久久久久蜜桃麻豆| 香蕉亚洲视频| 欧美视频在线免费| 亚洲国产影院| 久久精品主播| 亚洲一区二区三区在线看| 欧美大片91| 伊人精品视频| 久久激情一区| 一区二区av| 欧美韩日一区二区三区| 精品成人一区二区三区四区| 亚洲欧美怡红院| 日韩图片一区| 欧美成人午夜激情| 尤物九九久久国产精品的特点| 西西人体一区二区| 夜夜嗨av一区二区三区网页| 欧美多人爱爱视频网站| 在线观看一区| 老司机午夜精品视频| 性欧美暴力猛交另类hd| 国产精品久久久久久久久久直播| 日韩一级在线观看| 亚洲大片精品永久免费| 久久免费一区| 在线欧美三区| 美女91精品| 久久久中精品2020中文| 国产综合久久| 久久久www| 久久国产精品99国产| 国产日韩欧美在线看| 欧美中文字幕在线视频| 亚洲欧美国产不卡| 国产日韩欧美在线视频观看| 欧美一区二区三区免费视频| 亚洲欧美日韩国产综合| 国产精品一区二区视频| 新狼窝色av性久久久久久| 亚洲欧美激情一区二区| 国产欧美视频一区二区三区| 久久国产精品久久w女人spa| 欧美一区二区三区的|