日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SetProcessWorkingSetSize 函数的骗局

發布時間:2023/12/13 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SetProcessWorkingSetSize 函数的骗局 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SetProcessWorkingSetSize函數的騙局

本文引用自:http://hi.baidu.com/jenson138/item/e64e7e453c5b28e21381da9c

我實在不愿意提起這個話題.后來在網上看到幾篇文章,深深感覺到,已經有程序員站出來,揭穿這個忽悠了千百萬用戶的詭計了...
附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 去處理.

轉載于:https://www.cnblogs.com/fwycmengsoft/archive/2013/05/28/3103794.html

總結

以上是生活随笔為你收集整理的SetProcessWorkingSetSize 函数的骗局的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一本视频在线 | 欧美日韩国产成人在线 | 中国久久久 | 亚洲精品国产精品国自 | 一级片在线免费 | 漂亮人妻被中出中文字幕 | 白嫩初高中害羞小美女 | 操干视频 | 天天看天天射 | 国产激情一区二区三区在线观看 | 奇米777狠狠 | 日本高清不卡二区 | 欧美成人午夜免费视在线看片 | 久久国产欧美日韩精品 | 久久久噜噜噜久久中文字幕色伊伊 | 国产精品久久久久久中文字 | 日本美女黄色 | 国产午夜福利视频在线观看 | 在线播放黄色网址 | 97在线免费观看 | 国产剧情演绎av | 无码人妻丰满熟妇奶水区码 | 日日操夜夜操天天操 | 精品乱子伦一区二区 | 精品一区二区久久 | 亚色在线 | 朋友人妻少妇精品系列 | 玖玖热视频 | 久久久久女人精品毛片九一 | 成人网站免费观看入口 | 打屁股调教网站 | 91亚洲国产成人久久精品麻豆 | 亚洲一区二区三区不卡视频 | 久久久精品人妻av一区二区三区 | 免费看亚洲 | 无码熟妇人妻av | 性欧美长视频 | 亚洲美免无码中文字幕在线 | 蜜桃精品久久久久久久免费影院 | 亚洲xxxxx| 草草免费视频 | 欧洲中文字幕 | 91免费短视频 | 奶波霸巨乳一二三区乳 | 午夜视频在线观看一区 | 91亚洲国产成人久久精品麻豆 | 日韩资源 | 成人网免费 | 在线免费小电影 | 国产高h视频 | 97久久人人超碰caoprom欧美 | 精品视频免费播放 | 冲田杏梨 在线 | 色01看片网 | 精品无码久久久久久久久果冻 | 日韩精品一区二区三区在线 | 黄色avv | 黄色av日韩 | 国产免费观看一区 | а 天堂 在线 | 中文字幕日韩在线播放 | 欧美亚洲免费 | 九九黄色大片 | 欧美性猛交ⅹxx | 福利视频一区二区三区 | www.玖玖玖| 亚洲色图在线播放 | 91精品视频在线 | 男女啪啪国产 | 欧美v日韩| 在线免费小视频 | 亚洲国产精品天堂 | 黄在线免费看 | 中文字幕欧美色图 | 日韩av一区二区在线观看 | 波多野结衣之潜藏淫欲 | 综合久久一区 | 波多野结衣导航 | 成人在线观看www | 久色视频在线播放 | 永久免费54看片 | 亚色在线观看 | 亚洲精品社区 | 日韩大片免费在线观看 | 激情综合图 | 色欲av永久无码精品无码蜜桃 | 日韩黄色三级视频 | 久久久嫩草| 在线播放不卡 | 免费污视频在线观看 | 看免费黄色大片 | 日韩久久精品电影 | 肉色丝袜脚交一区二区 | av日韩中文字幕 | av永久 | 亚洲人一区二区三区 | 久久久久国产精品一区二区 | 波多野结衣1区2区3区 | 一区二区三区四区免费观看 |