bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

vb點(diǎn)虐 內(nèi)存回收 c# 實(shí)例化類內(nèi)存回收

vb點(diǎn)虐 內(nèi)存回收機(jī)制。。。。

一般點(diǎn)虐 的垃圾回收機(jī)制會在過程結(jié)束后進(jìn)行垃圾回收,但是垃圾回收是比較消耗系統(tǒng)資源的,所以不可能經(jīng)常被調(diào)用。

創(chuàng)新互聯(lián)長期為近千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為香河企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作,香河網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

如果你需要強(qiáng)制進(jìn)行垃圾回收,可在過程最后添加如下代碼:

GC.Collect()

強(qiáng)制進(jìn)行垃圾回收

VB點(diǎn)虐 2000的自動垃圾回收機(jī)制到底管用么???????!!!!

分類: 電腦/網(wǎng)絡(luò) 程序設(shè)計(jì) 其他編程語言

問題描述:

別跟我說VB2000自動釋放內(nèi)存,曾經(jīng)深信這句話的我,如今已是傷痕累累,好幾個(gè)大項(xiàng)目都差點(diǎn)毀在vb的內(nèi)存問題上,C#我倒不知道..VB的回收內(nèi)存速度太慢了,這只是保守的說,其實(shí)本人認(rèn)為它根本不會回收內(nèi)存.就算全部用上gc.collet也回收不了,而且越用越慢

在使用我的項(xiàng)目的時(shí)候,隨著窗口的開開關(guān)關(guān)\控件的調(diào)用,內(nèi)存一直飆,從14MB左右一路瘋狂飆高,40分鐘系統(tǒng)就崩潰了...上了補(bǔ)丁的XP可以不死機(jī),但就定著不動了..如果虛擬內(nèi)存文件大,可以維持到撐滿,但錄一條記錄平均要等一個(gè)小時(shí)!!!!!!!,后來我學(xué)乖了開始nothing全局變量(工作量驚人...),結(jié)果內(nèi)存開始有下走的現(xiàn)象(原來是一路向上..只占不放)但內(nèi)存還是呈曲線上飆,40分鐘到200多MB,于是我開始釋放局部變量,在每個(gè)方法中都要釋放!!!!!!!!!!!!!!!!!!!!!,而且還要區(qū)分哪些是引用!痛苦啊!!!

...結(jié)果三個(gè)月之后,滿面憔悴的我終于發(fā)現(xiàn)內(nèi)存接近正常了,雖然還不是釋放的很干凈,但能保證在一段時(shí)間內(nèi)不會崩潰了..至少客戶做的時(shí)候沒再提過意見...我并沒有優(yōu)化什么代碼,只是痛苦的釋放了一些全局和局部變量,結(jié)果內(nèi)存就不消耗的那么厲害了,你說奇怪不奇怪..但內(nèi)存始終不是釋放的那么干凈,我算過了一分鐘內(nèi)曲線飆高2MB左右,有時(shí)更多照這樣一來,真是早死不如晚死,想想將來還不如用java重新做呢...各位可憐可憐我吧,有什么好主意整理vb2000的內(nèi)存的好東東,就告訴我吧!!!!!!!!!!我真的受不了了!!!!!有沒有什么方法可以重新分配內(nèi)存呢,就算會造成頁中斷我也在所不惜!!!!

另外Me.Refresh()是什么意義,能釋放內(nèi)存么?

解析:

很簡單,你沒有正確理解VB的內(nèi)存自動回收機(jī)制,仔細(xì)看一下MSDN,好好研究一下相關(guān)的內(nèi)容。其實(shí)JAVA的內(nèi)存自動回收機(jī)制與VB是類似的,如果你用VB.NET做不好,換用JAVA照樣做不好。

其實(shí),你已經(jīng)發(fā)現(xiàn)了為什么內(nèi)存不能回收,只是你沒意識到罷了。

為什么要用全局變量呢?給你舉個(gè)極端的例子吧:建立一個(gè)全局的Hashtable,然后將程序中創(chuàng)建的每一個(gè)對象實(shí)例加入到這個(gè)hashtable中,那么你將看到內(nèi)存一直猛增,直到崩潰。

正確的作法是:

1、盡量不用、少用全局變量和靜態(tài)變量

2、如果沒有必要,就不要把對象實(shí)例加到全局或靜態(tài)的Hashtable、ArrayList之類的 *** 中去,除非你是想自己建立一個(gè)對象緩沖池

3、如果你自己要建立對象緩沖池,就一定要注意對象的清理,盡早將不用的對象從池中刪除

4、找本好一點(diǎn)的數(shù)據(jù)結(jié)構(gòu),仔細(xì)學(xué)學(xué)其中關(guān)于自動內(nèi)存回收的那幾種機(jī)制,以后在程序中不要違反它們的要求前提條件。

vb點(diǎn)虐 關(guān)閉窗口 內(nèi)存不能釋放

1.如果你釋放的是托管托管代碼的內(nèi)存,那么托管代碼的內(nèi)存管理是自動的,.NET可以保證我們的托管程序在結(jié)束時(shí)全部釋放。

2.如果是非托管資源時(shí).NET就不能自動管理了,下面是釋放非托管資源內(nèi)存方法

當(dāng)我們利用如數(shù)據(jù)庫、文件等非托管資源時(shí),就要用到.NET Framework中的標(biāo)準(zhǔn): IDisposable接口。按照標(biāo)準(zhǔn),所有有需要手動釋放非托管資源的類都得實(shí)現(xiàn)此接口。這個(gè)接口只有一個(gè)方法,Dispose(),不過有相對的 Guidelines指示如何實(shí)現(xiàn)此接口,在這里我向大家說一說。實(shí)現(xiàn)IDisposable這個(gè)接口的類需要有這樣的結(jié)構(gòu):

[Visual Basic]

Public Class Base

Implements IDisposable

Public Overloads Sub Dispose() Implements IDisposable.Dispose

Me.Dispose(True)

GC.SuppressFinalize(Me)

End Sub

Protected Overloads Overridable Sub Dispose(ByVal disposing As Boolean)

If disposing Then

' 托管類

End If

' 非托管資源釋放

End Sub

Protected Overrides Sub Finalize()

Me.Dispose(False)

MyBase.Finalize()

End Sub

End Class

Public Class Derive

Inherits Base

Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)

If disposing Then

' 托管類

End If

' 非托管資源釋放

MyBase.Dispose(disposing)

End Sub

End Class

我們要實(shí)現(xiàn)Dispose方法,實(shí)現(xiàn)這個(gè)Dispose方法的幾個(gè)準(zhǔn)則:

它不能扔出任何錯(cuò)誤,重復(fù)的調(diào)用也不能扔出錯(cuò)誤。也就是說,如果我已經(jīng)調(diào)用了一個(gè)對象的Dispose,當(dāng)我第二次調(diào)用Dispose的時(shí)候程序不應(yīng)該出錯(cuò),簡單地說程序在第二次調(diào)用Dispose時(shí)不會做任何事。這些可以通過一個(gè)flag或多重if判斷實(shí)現(xiàn)。

一個(gè)對象的Dispose要做到釋放這個(gè)對象的所有資源。拿一個(gè)繼承類為例,繼承類中用到了非托管資源所以它實(shí)現(xiàn)了IDisposable接口,如果繼承類的基類也用到了非托管資源那么基類也得被釋放,基類的資源如何在繼承類中釋放呢?當(dāng)然是通過一個(gè)virtual/Overridable方法了,這樣我們能保證每個(gè)Dispose都被調(diào)用到。這就是為什么我們的設(shè)計(jì)有一個(gè)virtual/Overridable的Dispose方法。注意我們首先要釋放繼承類的資源然后再釋放基類的資源。

因?yàn)榉峭泄苜Y源一定要被保障正確釋放所以我們要定義一個(gè)Finalizer來避免程序員忘了調(diào)用Dispose的情況。上面的設(shè)計(jì)就采用了這種形式。如果我們手動調(diào)用Dispose方法就沒有必要再保留Finalizer了,所以在Dispose中我們用了GC.SupressFinalize 將對象從Finalizer表去掉,這樣再回收時(shí)速度會更快。

那么那個(gè)disposing和"托管類"是怎么回事呢?是這樣:在"托管類"中寫所有你想在調(diào)用Dispose時(shí)讓其處于可釋放狀態(tài)的托管代碼。還記得我們說過我們不知道托管代碼是什么時(shí)候釋放的嗎?在這里我們只是去掉成員對象的引用讓它處于可被回收狀態(tài),并不是直接釋放內(nèi)存。在"托管類"中這里我們也要寫上所有實(shí)現(xiàn)了IDisposable的成員對象,因?yàn)樗麄円灿蠨ispose,所以也需要在對象的Dispose中調(diào)用他們的 Dispose,這樣才能保證第二個(gè)準(zhǔn)則。disposing是為了區(qū)分Dispose的調(diào)用方法,如果我們手動調(diào)用那么為了第二個(gè)準(zhǔn)則"托管類"部分當(dāng)然得執(zhí)行,但如果是Finalizer調(diào)用的Dispose,這時(shí)候?qū)ο笠呀?jīng)沒有任何引用,也就是說對象的成員自然也就不存在了(無引用),也就沒有必要執(zhí)行"托管類"部分了,因?yàn)樗麄円呀?jīng)處于可被回收狀態(tài)了。好了,這就是IDisposable接口的全部了。現(xiàn)在讓我們來回想一下,以前我們可能認(rèn)為有了 Dispose內(nèi)存就會馬上被釋放,這是錯(cuò)誤的。只有非托管內(nèi)存才會被馬上釋放,托管內(nèi)存的釋放由GC管理,我們不用管。

跪求大神指點(diǎn)vb點(diǎn)虐 怎么釋放變量在內(nèi)存中的殘留地址值呀

點(diǎn)虐 有自己的資源回收機(jī)制GC。

如果變量不再使用了,所有引用該變量的其它變量也都沒用了(dispose或者賦值為空了),那么這些沒用的變量會定時(shí)的被GC自動回收,不需要自己去管理。

如果非要自己釋放資源的話,可以使用 GC.Collect() 進(jìn)行釋放,但是并不能保證一次GC.Collect()就可以釋放掉所有沒有用的資源,可能要經(jīng)過好幾輪GC.Collect()才能釋放干凈。

所以還是建議不要手動回收了,讓系統(tǒng)根據(jù)要求自動回收吧。

名稱欄目:vb點(diǎn)虐 內(nèi)存回收 c# 實(shí)例化類內(nèi)存回收
網(wǎng)頁URL:http://vcdvsql.cn/article42/ddseshc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站ChatGPT云服務(wù)器外貿(mào)網(wǎng)站建設(shè)網(wǎng)站導(dǎo)航網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化