執(zhí)行 dispose 后,由.net 的GC垃圾回收器周期性地回收資源, me.close 方法的基類(lèi)會(huì)調(diào)用 dispose 方法end 是從vb中繼承下來(lái)的語(yǔ)句,直接指示退出程序.程序的資源將被釋放,程序并未希望結(jié)束時(shí),不適合使用該方法.若要強(qiáng)行退出應(yīng)用程序,在.net中可以使用Environment.Exit(0) 下面是 system.windows.forms.form 類(lèi)對(duì) close 和 dispose 的封裝:'------- ClosePublic Sub Close()

創(chuàng)新互聯(lián),專(zhuān)注為中小企業(yè)提供官網(wǎng)建設(shè)、營(yíng)銷(xiāo)型網(wǎng)站制作、響應(yīng)式網(wǎng)站建設(shè)、展示型做網(wǎng)站、網(wǎng)站設(shè)計(jì)等服務(wù),幫助中小企業(yè)通過(guò)網(wǎng)站體現(xiàn)價(jià)值、有效益。幫助企業(yè)快速建站、解決網(wǎng)站建設(shè)與網(wǎng)站營(yíng)銷(xiāo)推廣問(wèn)題。
If MyBase.GetState(H40000) Then
Throw New InvalidOperationException(SR.GetString("ClosingWhileCreatingHandle", New Object() { "Close" }))
End If
If MyBase.IsHandleCreated Then
Me.closeReason = CloseReason.UserClosing
MyBase.SendMessage(H10, 0, 0)
Else
MyBase.Dispose
End If
End Sub '------- Dispose Protected Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
Me.CalledOnLoad = False
Me.CalledMakeVisible = False
Me.CalledCreateControl = False
If MyBase.Properties.ContainsObject(Form.PropAcceptButton) Then
MyBase.Properties.SetObject(Form.PropAcceptButton, Nothing)
End If
If MyBase.Properties.ContainsObject(Form.PropCancelButton) Then
MyBase.Properties.SetObject(Form.PropCancelButton, Nothing)
End If
If MyBase.Properties.ContainsObject(Form.PropDefaultButton) Then
MyBase.Properties.SetObject(Form.PropDefaultButton, Nothing)
End If
If MyBase.Properties.ContainsObject(Form.PropActiveMdiChild) Then
MyBase.Properties.SetObject(Form.PropActiveMdiChild, Nothing)
End If
If (Not Me.MdiWindowListStrip Is Nothing) Then
Me.MdiWindowListStrip.Dispose
Me.MdiWindowListStrip = Nothing
End If
If (Not Me.MdiControlStrip Is Nothing) Then
Me.MdiControlStrip.Dispose
Me.MdiControlStrip = Nothing
End If
If (Not Me.MainMenuStrip Is Nothing) Then
Me.MainMenuStrip = Nothing
End If
Dim form As Form = DirectCast(MyBase.Properties.GetObject(Form.PropOwner), Form)
If (Not form Is Nothing) Then
form.RemoveOwnedForm(Me)
MyBase.Properties.SetObject(Form.PropOwner, Nothing)
End If
Dim formArray As Form() = DirectCast(MyBase.Properties.GetObject(Form.PropOwnedForms), Form())
Dim i As Integer = (MyBase.Properties.GetInteger(Form.PropOwnedFormsCount) - 1)
Do While (i = 0)
If (Not formArray(i) Is Nothing) Then
formArray(i).Dispose
End If
i -= 1
Loop
If (Not Me.smallIcon Is Nothing) Then
Me.smallIcon.Dispose
Me.smallIcon = Nothing
End If
Me.ResetSecurityTip(False)
MyBase.Dispose(disposing)
Me.ctlClient = Nothing
Dim menu As MainMenu = Me.Menu
If ((Not menu Is Nothing) AndAlso (menu.ownerForm Is Me)) Then
menu.Dispose
MyBase.Properties.SetObject(Form.PropMainMenu, Nothing)
End If
If (Not MyBase.Properties.GetObject(Form.PropCurMenu) Is Nothing) Then
MyBase.Properties.SetObject(Form.PropCurMenu, Nothing)
End If
Me.MenuChanged(0, Nothing)
Dim menu2 As MainMenu = DirectCast(MyBase.Properties.GetObject(Form.PropDummyMenu), MainMenu)
If (Not menu2 Is Nothing) Then
menu2.Dispose
MyBase.Properties.SetObject(Form.PropDummyMenu, Nothing)
End If
Dim menu3 As MainMenu = DirectCast(MyBase.Properties.GetObject(Form.PropMergedMenu), MainMenu)
If (Not menu3 Is Nothing) Then
If ((menu3.ownerForm Is Me) OrElse (menu3.form Is Nothing)) Then
menu3.Dispose
End If
MyBase.Properties.SetObject(Form.PropMergedMenu, Nothing)
End If
Else
MyBase.Dispose(disposing)
End If
End Sub
.NET目前的垃圾回收機(jī)制不能實(shí)現(xiàn)把對(duì)象真正的立即釋放掉,GC會(huì)對(duì)垃圾進(jìn)行管理,如果垃圾沒(méi)有引用計(jì)數(shù)了,就會(huì)被回收。
編碼的時(shí)候能用托管類(lèi)盡量用托管類(lèi)去實(shí)現(xiàn)你的功能,
對(duì)于實(shí)現(xiàn)了IDisposable接口的類(lèi),用完了記得調(diào)用close或者Dispose又或者相應(yīng)的方法去釋放資源,最好吧使用using語(yǔ)句塊;
對(duì)于Com對(duì)象,用完了先關(guān)閉,然后調(diào)用Runtime.InteropServices.Marshal.FinalReleaseComObject()方法把Com對(duì)象的引用計(jì)數(shù)設(shè)置為0。當(dāng) COM 對(duì)象的引用計(jì)數(shù)變?yōu)?0 時(shí),通常會(huì)釋放 COM 對(duì)象,不過(guò)這取決于 COM
對(duì)象的實(shí)現(xiàn),而不是運(yùn)行時(shí)可以控制的。最后調(diào)用ComObj = Nothing以釋放ComObj持有的引用。不過(guò)要注意,只有當(dāng)ComObj的生存期相對(duì)于垃圾回收器用于檢測(cè)孤立對(duì)象的時(shí)間來(lái)說(shuō)很長(zhǎng)時(shí),你才應(yīng)該將變量設(shè)置為 Nothing。
有部分來(lái)自MSDN
一般.net的垃圾回收機(jī)制會(huì)在過(guò)程結(jié)束后進(jìn)行垃圾回收,但是垃圾回收是比較消耗系統(tǒng)資源的,所以不可能經(jīng)常被調(diào)用。
如果你需要強(qiáng)制進(jìn)行垃圾回收,可在過(guò)程最后添加如下代碼:
GC.Collect()
強(qiáng)制進(jìn)行垃圾回收
很簡(jiǎn)單,你沒(méi)有正確理解VB.net的內(nèi)存自動(dòng)回收機(jī)制,仔細(xì)看一下MSDN,好好研究一下相關(guān)的內(nèi)容。其實(shí)JAVA的內(nèi)存自動(dòng)回收機(jī)制與VB.net是類(lèi)似的,如果你用VB.NET做不好,換用JAVA照樣做不好。
其實(shí),你已經(jīng)發(fā)現(xiàn)了為什么內(nèi)存不能回收,只是你沒(méi)意識(shí)到罷了。
為什么要用全局變量呢?給你舉個(gè)極端的例子吧:建立一個(gè)全局的Hashtable,然后將程序中創(chuàng)建的每一個(gè)對(duì)象實(shí)例加入到這個(gè)hashtable中,那么你將看到內(nèi)存一直猛增,直到崩潰。
正確的作法是:
1、盡量不用、少用全局變量和靜態(tài)變量
2、如果沒(méi)有必要,就不要把對(duì)象實(shí)例加到全局或靜態(tài)的Hashtable、ArrayList之類(lèi)的集合中去,除非你是想自己建立一個(gè)對(duì)象緩沖池
3、如果你自己要建立對(duì)象緩沖池,就一定要注意對(duì)象的清理,盡早將不用的對(duì)象從池中刪除
4、找本好一點(diǎn)的數(shù)據(jù)結(jié)構(gòu),仔細(xì)學(xué)學(xué)其中關(guān)于自動(dòng)內(nèi)存回收的那幾種機(jī)制,以后在程序中不要違反它們的要求前提條件。
通過(guò)下面的方法進(jìn)行修改:
TextBox1.Font = New Font("Arial", 16, FontStyle.Bold) ? ? ? 'Arial字體,大小:16,粗體
'TextBox1.Font = New Font("Arial", 16, FontStyle.Italic) ? ?'Arial字體,大小:16,斜體
'TextBox1.Font = New Font("Arial", 16, FontStyle.Regular) ? 'Arial字體,大小:16,正常
'TextBox1.Font = New Font("Arial", 16, FontStyle.Strikeout) 'Arial字體,大小:16,刪除線
'TextBox1.Font = New Font("Arial", 16, FontStyle.Underline) 'Arial字體,大小:16,下劃線
TextBox1.ForeColor = Color.Red ?'前景色
VB.NET的簡(jiǎn)介
VB.net是微軟最新平臺(tái)技術(shù),是.netframeworkSDK的一種語(yǔ)言。VB.net和VC#.net在功能上沒(méi)有區(qū)別。編譯以后生成的可執(zhí)行文件被稱(chēng)為Assembly,即程序集。
VB.net的版本號(hào)是VisualBasic7.0,它的運(yùn)行是建立在CLR(CommonLanguageRuntime)和MSIL(MicrosoftIntermediateLanguage)虛擬器上的。其實(shí),它的機(jī)制和Java差不多。
VB.NET的特點(diǎn)
1.真正成為面向?qū)ο笠约爸С掷^承性的語(yǔ)言。
2.窗體設(shè)計(jì)器支持可視化繼承,并且包含了許多新的特性,比如自動(dòng)改變窗體大小、資源本地化支持、數(shù)據(jù)類(lèi)工具內(nèi)在支持XML數(shù)據(jù)。
3.直接建立在.NET的框架結(jié)構(gòu)上,因此開(kāi)發(fā)人員可以充分利用所有.NET平臺(tái)特性,也可以與其他的.NET語(yǔ)言交互。
4.為Windows應(yīng)用程序提供了XCOPY部署,開(kāi)發(fā)者不再需要為DLL的版本問(wèn)題擔(dān)憂。
VB.net的語(yǔ)言特點(diǎn):
1.代碼托管。被托管的代碼享受.netframework提供的安全保障和垃圾回收機(jī)制,但是這也同時(shí)表明,你的程序被框在Framework里面了。API變得不太方便。
2.強(qiáng)大的面向?qū)ο筇匦浴,F(xiàn)在VB7已經(jīng)是一個(gè)完全的面向?qū)ο蟪绦颉?/p>
現(xiàn)在VB7已經(jīng)支持類(lèi)的各種特性:繼承,函數(shù)的覆蓋,重載,虛擬,隱藏??
3.功能強(qiáng)大,程序界面更標(biāo)準(zhǔn)。
4.程序代碼結(jié)構(gòu)化更強(qiáng),開(kāi)發(fā)環(huán)境舒適體貼。
網(wǎng)站名稱(chēng):vb.net垃圾回收的簡(jiǎn)單介紹
本文來(lái)源:http://chinadenli.net/article8/hpeeip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、企業(yè)網(wǎng)站制作、微信公眾號(hào)、定制網(wǎng)站、網(wǎng)站收錄、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)