我都不敢認(rèn)你這玩意了,不知是不是要把我2GB的內(nèi)存變成1GB的,還是說(shuō)把占用空間清理一些?如果是這樣的話,那也真的是有點(diǎn)可怕,萬(wàn)一把正在使用的變量給清了,會(huì)不會(huì)出錯(cuò)?或者弄得程序發(fā)神經(jīng),亂搞了?

成都創(chuàng)新互聯(lián)專注于六合企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),購(gòu)物商城網(wǎng)站建設(shè)。六合網(wǎng)站建設(shè)公司,為六合等地區(qū)提供建站服務(wù)。全流程專業(yè)公司,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
vb.net有垃圾回收機(jī)制,一般不用自己清理內(nèi)存,對(duì)象用完后用dispose方法釋放就行了,文件打開狀態(tài)當(dāng)然無(wú)法刪除.
Private?Sub?Button1_Click(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?Button1.Click
Dim?path?As?String?=?"C:\Data.mdb"?'文件釋放路徑
Dim?resources?As?System.Resources.ResourceManager?=?My.Resources.ResourceManager
Dim?b()?As?Byte?=?resources.GetObject("Data")
Dim?s?As?IO.Stream
Try
s?=?IO.File.Create(path)
s.Write(b,?0,?b.Length)
s.Close()
MessageBox.Show("資源釋放成功")
Catch?ex?As?Exception
MessageBox.Show("資源釋放失敗!Result="?+?ex.Message)
End?Try
End?Sub
釋放內(nèi)存一般指存儲(chǔ)在內(nèi)存里的變量、數(shù)組、運(yùn)行代碼存儲(chǔ)空間的釋放。這里其實(shí)需要分2種情況。一種是數(shù)組、變量和代碼的存儲(chǔ)空間都是在程序運(yùn)行完成后由操作系統(tǒng)自動(dòng)進(jìn)行內(nèi)存的回收,也就是自動(dòng)釋放了內(nèi)存,詳細(xì)的可看看以下vb語(yǔ)言對(duì)變量存活期的說(shuō)明。另一種是在程序過(guò)程中某些數(shù)組內(nèi)存后續(xù)過(guò)程不再使用了,而特別使用代碼將數(shù)組內(nèi)存直接釋放的情況,例如ERASE語(yǔ)句。
一、變量的存活期
變量保留其值的這段時(shí)間,稱為生存周期。變量的值可能在整個(gè)生存周期都在改變,但它仍然保留著一些值。當(dāng)變量失去了范圍之后,它也就不再保存著任一個(gè)值。
當(dāng)過(guò)程開始運(yùn)行時(shí),所有的變量都會(huì)被初始化。一個(gè)數(shù)值變量會(huì)初始化成
0,變長(zhǎng)字符串被初始化成零長(zhǎng)度的字符串 (""),而定長(zhǎng)字符串會(huì)被填滿 ASCII 字符碼 0 所表示的字符或是 Chr(0)。Variant變量會(huì)被初始化成 Empty。用戶定義類型中每一個(gè)元素變量會(huì)被當(dāng)成個(gè)別變量來(lái)做初始化。
當(dāng)聲明一個(gè)對(duì)象變量時(shí),內(nèi)存中雖有保留空間,但它的值會(huì)被設(shè)置成
Nothing,直到利用 Set 語(yǔ)句對(duì)它指定一個(gè)對(duì)象引用。
如果在代碼的運(yùn)行期間,變量的值一直沒(méi)有改變,則它會(huì)繼續(xù)保有它的初始值直到它丟失范圍為止。
Dim 語(yǔ)句聲明過(guò)程的級(jí)別變量將保留一個(gè)值,直到此過(guò)程退出為止。如果該過(guò)程調(diào)用其它的過(guò)程,則在這些過(guò)程正在運(yùn)行的同時(shí),屬于調(diào)用者過(guò)程的變量也保留它的值。
如果過(guò)程的級(jí)別變量是用 Static 關(guān)鍵字來(lái)聲明的,則只要代碼正在任何模塊中運(yùn)行此變量仍會(huì)保留它的值。而當(dāng)所有的代碼都完成運(yùn)行后,變量會(huì)失去它的范圍和它的值。所以它的存活期和模塊級(jí)別的變量是一樣的。
模塊級(jí)別的變量與靜態(tài)變量是不同的。在標(biāo)準(zhǔn)模塊或類模塊中變量會(huì)保留它的值,直到停止運(yùn)行代碼。在對(duì)象類模塊中,只要仍有一個(gè)屬于此對(duì)象類的實(shí)例存在,則變量會(huì)一直保留它的值。模塊級(jí)別的變量會(huì)一直占用內(nèi)存資源,直到重新設(shè)置它們的值,所以只有在必要時(shí)才使用它們。
如果在 Sub 或 Function 語(yǔ)句前加上 Static 關(guān)鍵字,則在此過(guò)程中所有過(guò)程級(jí)別的變量的值被保留在調(diào)用期間。
二、erase語(yǔ)句:
set xxx=nothing就是把對(duì)象占用的空間釋放掉。 其他的局部變量都在棧內(nèi)存,用完會(huì)自動(dòng)釋放的
.net 有自己的資源回收機(jī)制GC。
如果變量不再使用了,所有引用該變量的其它變量也都沒(méi)用了(dispose或者賦值為空了),那么這些沒(méi)用的變量會(huì)定時(shí)的被GC自動(dòng)回收,不需要自己去管理。
如果非要自己釋放資源的話,可以使用 GC.Collect() 進(jìn)行釋放,但是并不能保證一次GC.Collect()就可以釋放掉所有沒(méi)有用的資源,可能要經(jīng)過(guò)好幾輪GC.Collect()才能釋放干凈。
所以還是建議不要手動(dòng)回收了,讓系統(tǒng)根據(jù)要求自動(dòng)回收吧。
本文名稱:包含vbnet釋放內(nèi)存的詞條
本文URL:http://chinadenli.net/article18/hipggp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、虛擬主機(jī)、商城網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(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)