国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看
打開APP
未登錄
開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服
開通VIP
首頁
好書
留言交流
下載APP
聯(lián)系客服
揭穿號稱內(nèi)存占用極低軟件的詭計(jì)(ZT)
mo360
>《電腦網(wǎng)絡(luò)》
2006.11.18
關(guān)注
物理內(nèi)存和虛擬內(nèi)存
物理內(nèi)存,在應(yīng)用中,自然是顧名思義,物理上,真實(shí)的插在板子上的內(nèi)存是多大就是多大了.看機(jī)器配置的時(shí)候,看的就是這個(gè)物理內(nèi)存.
如果執(zhí)行的程序很大或很多,就會導(dǎo)致物理內(nèi)存消耗殆盡.為了解決這個(gè)問題,Windows中運(yùn)用了虛擬內(nèi)存技術(shù),即拿出一部分硬盤空間來充當(dāng)內(nèi)存使用,當(dāng)內(nèi)存占用完時(shí),電腦就會自動(dòng)調(diào)用硬盤來充當(dāng)內(nèi)存,以緩解內(nèi)存的緊張.
一個(gè)程序,不可避免地要用到虛擬內(nèi)存,因?yàn)椴活l繁執(zhí)行或者已經(jīng)很久沒有執(zhí)行的代碼,沒有必要留在物理內(nèi)存中,只會造成浪費(fèi);放在虛擬內(nèi)存中,等執(zhí)行這部分代碼的時(shí)候,再調(diào)出來.
Windows 的任務(wù)管理器可以幫助我們看到進(jìn)程的虛擬內(nèi)存.調(diào)出任務(wù)管理器,點(diǎn)擊菜單“查看”-“選擇列”,在出現(xiàn)的窗口中,鉤上“虛擬內(nèi)存大小”,如圖1:
點(diǎn)“確定”,這個(gè)時(shí)候,進(jìn)程列表中已經(jīng)顯示各進(jìn)程的虛擬內(nèi)存大小,如圖2:
一個(gè)程序到底應(yīng)該使用多少虛擬內(nèi)存呢?不一定,但是應(yīng)該以恰到好處的符合虛擬內(nèi)存原本作用為最好.
下面將揭穿表面看起來調(diào)用了大量圖片、大量運(yùn)行庫的程序,為什么才“占用”不到 1 MB 的內(nèi)存的詭計(jì).
原來是 SetProcessWorkingSetSize 函數(shù)
MSDN對該函數(shù)的表述(翻譯):使用這個(gè)函數(shù)來設(shè)置應(yīng)用程序最小和最大的運(yùn)行空間,只會保留需要的內(nèi)存.當(dāng)應(yīng)用程序被閑置或系統(tǒng)內(nèi)存太低時(shí),操作系統(tǒng)會自動(dòng)調(diào)用這個(gè)機(jī)制來設(shè)置應(yīng)用程序的內(nèi)存.應(yīng)用程序也可以使用 VirtualLock來鎖住一定范圍的內(nèi)存不被系統(tǒng)釋放;當(dāng)你加大運(yùn)行空間給應(yīng)用程序,你能夠得到的物理內(nèi)存取決于系統(tǒng),這會造成其他應(yīng)用程序降低性能或系統(tǒng)總體降低性能,這也可能導(dǎo)致請求物理內(nèi)存的操作失敗,例如:建立 進(jìn)程,線程,內(nèi)核池,就必須小心的使用該函數(shù).
也就是說,該函數(shù)不是節(jié)省內(nèi)存,而是強(qiáng)制把進(jìn)程的物理內(nèi)存搬到虛擬內(nèi)存中.
另外有一些資料上說,該函數(shù)“將有可能導(dǎo)致缺頁中斷,嚴(yán)重影響性能”.
函數(shù)原型:
BOOL SetProcessWorkingSetSize(
HANDLE hProcess,
SIZE_T dwMinimumWorkingSetSize,
SIZE_T dwMaximumWorkingSetSize
);
我們用 VB 來做這么一個(gè)簡單的例子,是程序占用 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, ByValdwMaximumWorkingSetSize 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)存會慢慢被調(diào)出來,恢復(fù)原來的內(nèi)存大小.
如果要使一個(gè)本來需要占用大量內(nèi)存的程序減低到幾百 KB ,使用同樣的方法即可.
詭計(jì)帶來的危害
如果 SetProcessWorkingSetSize函數(shù)被正常使用,是非常有用處的.但是為了蒙騙用戶的眼睛,每秒,甚至幾十毫秒就把大量內(nèi)存往虛擬內(nèi)存里面壓,就會帶來無可預(yù)計(jì)的危害.看看這篇文章怎么說:“因?yàn)樗皇菚簳r(shí)的將應(yīng)用程序占用的內(nèi)存移至虛擬內(nèi)存,一旦,應(yīng)用程序被激活或者有操作請求時(shí),這些內(nèi)存又會被重新占用.如果你強(qiáng)制使用該方法來設(shè)置程序占用的內(nèi)存,那么可能在一定程度上反而會降低系統(tǒng)性能,因?yàn)橄到y(tǒng)需要頻繁的進(jìn)行內(nèi)存和硬盤間的頁面交換.”.
沒錯(cuò),如果你使用了這類軟件,意味著你的硬盤將每秒將 I/O 大量數(shù)據(jù);硬盤的磁針將拼命旋轉(zhuǎn)...(當(dāng)然硬盤磁針不可能不旋轉(zhuǎn)^_^,只是選擇得更厲害而已).
不是說 BT 很傷內(nèi)存嗎?不然,因?yàn)楝F(xiàn)在大多 BT 軟件都有緩存技術(shù).且看 Bitcomet官方對緩存技術(shù)的說明:“傳統(tǒng)BT高速下載時(shí)硬盤會響得很厲害,這是大量的隨機(jī)讀取造成的.... BitComet可以由用戶設(shè)置緩存大小....可以明顯地看出犧牲一小部分內(nèi)存作緩存對硬盤的保護(hù)作用.”
是不是有種心寒的感覺?一類軟件寧愿犧牲內(nèi)存,也要減少保護(hù)硬盤;而另外一類軟件,卻為了欺騙用戶,讓CPU、硬盤更加奔波......
抓一個(gè)兇手
這類軟件不少,我以其中一個(gè)桌面工具為例,揭穿它的假面具(不點(diǎn)名字了).運(yùn)行該軟件后,隨意操作一下,然后打開進(jìn)程管理器,把虛擬內(nèi)存列調(diào)出來,找到該進(jìn)程,如圖3:
OK,20 MB 虛擬內(nèi)存,而只有 632 KB 物理內(nèi)存.細(xì)心的你會發(fā)現(xiàn),大概每 1 秒,該行都有閃爍的感覺,沒錯(cuò),這正是每秒調(diào)用SetProcessWorkingSetSize 的結(jié)果.另外,我們打開 Norton Process Viewer ,查看該進(jìn)程的 CPU占用情況.
可以看到,就算沒有操作該軟件,但是每秒,都有 3%的CPU占用起伏(雖然這并不能說明什么).另外,內(nèi)存框中可以看到物理內(nèi)存和虛擬內(nèi)存的占用,兩者相去甚遠(yuǎn).此外,可以用 Hook API技術(shù)來證明每秒調(diào)用 SetProcessWorkingSetSize 的行為.
應(yīng)該怎么做
這篇文章只想讓用戶了解軟件占用資源的實(shí)際.而程序員應(yīng)該把下功夫,真正從代碼中減少內(nèi)存的消耗,而不是一味忽悠用戶.調(diào)用 SetProcessWorkingSetSize 會帶來某些好處,但是何時(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 去處理.
(本人技術(shù)有限,對于文中的錯(cuò)誤懇請高手給予指正)
附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)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報(bào)
。
打開APP,閱讀全文并永久保存
查看更多類似文章
猜你喜歡
類似文章
軟件也忽悠人-揭穿號稱內(nèi)存占用極低的軟件的詭計(jì)
全面理解虛擬內(nèi)存及優(yōu)化方法
Windows內(nèi)存清理工具實(shí)現(xiàn)——從現(xiàn)象到本質(zhì)
關(guān)于 SetProcessWorkingSetSize 和內(nèi)存釋放
內(nèi)核怎樣管理你的內(nèi)存
在 Windows CE 下申請大容量物理內(nèi)存
更多類似文章 >>
生活服務(wù)
首頁
萬象
文化
人生
生活
健康
教育
職場
理財(cái)
娛樂
藝術(shù)
上網(wǎng)
留言交流
回頂部
聯(lián)系我們
分享
收藏
點(diǎn)擊這里,查看已保存的文章
導(dǎo)長圖
關(guān)注
一鍵復(fù)制
下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!
聯(lián)系客服
微信登錄中...
請勿關(guān)閉此頁面
先別劃走!
送你5元優(yōu)惠券,購買VIP限時(shí)立減!
5
元
優(yōu)惠券
優(yōu)惠券還有
10:00
過期
馬上使用
×