您好,登錄后才能下訂單哦!
本篇文章為大家展示了VB.NET內(nèi)存占用的解決方法,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
VB.NET為我們帶來了許多新的應(yīng)用方式和代碼編寫方式,在一定程度上大大提高了編程人員的編程效率。而且其應(yīng)用方式多樣化,靈活性等特點(diǎn)大大吸引著開發(fā)人員。
VB.NET內(nèi)存占用方法一:將窗體隱藏或者最小化啟動(dòng)
下列VB.NET 2005代碼片斷通過窗體變量m_IsHide來控制是否將窗體最小化并隱藏,初始化為True。
為了運(yùn)行下列代碼,還需要一個(gè)NotifyIcon及一個(gè)與之關(guān)聯(lián)的ContextMenuStrip,后者包含mnuShow和mnuHide菜單兩枚。
Private m_IsHide As Boolean = True
Private Sub frmMain_Activated() Sub
frmMain_Activated(ByVal sender As
Object, ByVal e As System.EventArgs)
Handles Me.ActivatedIf m_IsHide Then
Me.WindowState = FormWindowState.
MinimizedMe.Hide()
Else
Me.WindowState = FormWindowState.
NormalMe.Show()
End If
End Sub
Private Sub frmMain_Resize() Sub
frmMain_Resize(ByVal sender As Object,
ByVal e As System.EventArgs)
Handles Me.ResizeIf Me.WindowState = FormWindowState.
Minimized Thenm_IsHide = True
Me.Hide()
End If
End Sub
Private Sub mnuShow_Click() Sub
mnuShow_Click(ByVal sender As
System.Object, ByVal e As System.
EventArgs) Handles mnuShow.Clickm_IsHide = False
Me.WindowState = FormWindowState.Normal
Me.Show()
End Sub
Private Sub mnuHide_Click() Sub
mnuHide_Click(ByVal sender As System.
Object, ByVal e As System.EventArgs)
Handles mnuHide.Clickm_IsHide = True
Me.WindowState = FormWindowState.Minimized
Me.Hide()
End Sub
上述代碼的功能是:
VB.NET可執(zhí)行語句示例代碼解讀
VB.NET創(chuàng)建過程相關(guān)步驟詳解
如何對(duì)VB.NET流進(jìn)行正確操作
兩種VB.NET發(fā)送郵件方法解讀
VB.NET調(diào)用WinAPI實(shí)例探討
1、 啟動(dòng)時(shí)最小化并隱藏
2、 點(diǎn)擊mnuHide窗體隱藏
3、 點(diǎn)擊mnuShow窗體恢復(fù)
4、 最小化時(shí)窗體隱藏
一句話,其實(shí)就是編程使窗體啟動(dòng)時(shí)最小化。
VB.NET內(nèi)存占用方法二:Windows將程序占用的內(nèi)存倒入虛擬內(nèi)存可以造成小內(nèi)存占用的假象。
樂天居上有篇文章“將物理內(nèi)存的占用挪到虛擬內(nèi)存里-----揭密篇 ”對(duì)此有完整的介紹:“而是操作系統(tǒng)本身就有這個(gè)機(jī)制,即當(dāng)程序不使用時(shí)(最小化),操作系統(tǒng)會(huì)調(diào)用某些命令,來將該程序占用的內(nèi)存移至虛擬內(nèi)存,只保留一小部分常規(guī)代碼”
BOOL SetProcessWorkingSetSize( HANDLE hProcess, SIZE_T dwMinimumWorkingSetSize, SIZE_T dwMaximumWorkingSetSize );
“將 2個(gè) SIZE_T 參數(shù)設(shè)置為 -1 ,即可以使進(jìn)程使用的內(nèi)存交換到虛擬內(nèi)存,只保留一小部分代碼。
事實(shí)上,使用該函數(shù)并不能提高什么性能,也不會(huì)真的節(jié)省內(nèi)存。因?yàn)樗皇菚簳r(shí)的將應(yīng)用程序占用的內(nèi)存移至虛擬內(nèi)存,一旦,應(yīng)用程序被激活或者有操作請(qǐng)求時(shí),這些內(nèi)存又會(huì)被重新占用。如果你強(qiáng)制使用該方法來 設(shè)置程序占用的內(nèi)存,那么可能在一定程度上反而會(huì)降低系統(tǒng)性能,因?yàn)橄到y(tǒng)需要頻繁的進(jìn)行內(nèi)存和硬盤間的頁面交換?!?/p>
給出我在vb2005中的使用范例:
Imports System.Runtime.InteropServices
Module modMain Module modMain
< DllImport("kernel32.dll")> _
Public Function SetProcessWorkingSetSize()
Function SetProcessWorkingSetSize( _ByVal hProcess As Integer, _
ByVal dwMinimumWorkingSetSize As Integer, _
ByVal dwMaximumWorkingSetSize As Integer) _
As Integer
End Function
< DllImport("kernel32.dll")> _
Public Function GetCurrentProcess()
Function GetCurrentProcess() As IntegerEnd Function
Public Sub ReduceMem() Sub ReduceMem()
SetProcessWorkingSetSize(GetCurrentProcess, -1, -1)
End Sub
End Module
使用ReduceMem()函數(shù)的效果很贊,但是不建議經(jīng)常用,我只是在FormLoad時(shí)用一下,效果就很好了。
值得一提的是,如果不使用GetCurrentProcess()函數(shù)得到當(dāng)前Process,而是使用Process.GetCurrentProcess(),則無法有效縮減使用內(nèi)存。
上述內(nèi)容就是VB.NET內(nèi)存占用的解決方法,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。