發(fā)文章
發(fā)文工具
撰寫
網(wǎng)文摘手
文檔
視頻
思維導(dǎo)圖
隨筆
相冊
原創(chuàng)同步助手
其他工具
圖片轉(zhuǎn)文字
文件清理
AI助手
留言交流
public class BaseResource: IDisposable {
// 非托管資源
private IntPtr handle;
// 托管資源
private Component Components;
// 對象是否已被釋放的標(biāo)志
private bool disposed = false; public BaseResource() { } // 釋放資源,對外開放的可調(diào)用的方法 public void Dispose() {
// 釋放資源
Dispose(true);
// 指示在析構(gòu)函數(shù)中跳過垃圾回收
GC.SuppressFinalize(this); } // 釋放資源,如果disposing為true,釋放所有的托管資源和非托管資源,如果為false,則僅僅釋放非托管資源,這主要是為了避免在析構(gòu)函數(shù)中重復(fù)2次進(jìn)行垃圾回收 protected virtual void Dispose(bool disposing) { // 檢查該對象是否已經(jīng)被釋放了 if(!this.disposed) { if(disposing) {
// 釋放托管資源
Components.Dispose(); }
// 釋放非托管資源
CloseHandle(handle); handle = IntPtr.Zero; }
// 標(biāo)記該對象為已被釋放的對象
disposed = true; } // 析構(gòu)函數(shù),又名終結(jié)器 ~BaseResource() { // 釋放非托管資源,在調(diào)用終結(jié)器方法時(shí)系統(tǒng)自動會對托管的資源進(jìn)行垃圾回收 Dispose(false); } // 允許多次調(diào)用Dispose,但會拋出異常publicvoid DoSomething() { if(this.disposed) { thrownew ObjectDisposedException(); } } }
public void Close() { // 釋放資源 Dispose(); }
來自: 昵稱10504424 > 《工作》
0條評論
發(fā)表
請遵守用戶 評論公約
C#技術(shù)漫談之垃圾回收機(jī)制(GC)
如果Gen 0 heap內(nèi)存達(dá)到閥值,則觸發(fā)0代GC,0代GC后Gen 0中幸存的對象進(jìn)入Gen1。如果Gen 1的內(nèi)存達(dá)到閥值,則進(jìn)行1代GC,1代GC將Gen 0 h...
.NET Framework 自動內(nèi)存管理機(jī)制深入剖析 (C#分析篇) - syinter...
NET Framework 自動內(nèi)存管理機(jī)制深入剖析 (C#分析篇) - syinter...* * public void Dispose() * * 該成員支持 .NET 框架結(jié)構(gòu),因此不適用于直接從代碼中使用。...
.NET基礎(chǔ)拾遺(1)類型語法基礎(chǔ)和內(nèi)存管理基礎(chǔ)
①當(dāng)每個(gè)包含F(xiàn)inalize方法的類型的實(shí)例對象被分配時(shí),.NET會在一張?zhí)囟ǖ谋斫Y(jié)構(gòu)中添加一個(gè)引用并且指向這個(gè)實(shí)例對象,暫且稱該表為“帶...
C# 托管資源和非托管資源
C# 托管資源和非托管資源。托管資源指的是.NET可以自動進(jìn)行回收的資源,主要是指托管堆上分配的內(nèi)存資源。//參數(shù)為true表示釋放所有資源,只能由使用者調(diào)用 //參數(shù)為false表示釋放非托管資源,只能由垃...
深入.NET托管堆(managed heap)
在.NET的所有技術(shù)中,最具爭議的恐怕是垃圾收集(Garbage Collection,GC)了。作為.NET框架中一個(gè)重要的部分,托管堆和垃圾收集機(jī)制對我們中的大部分人來說是陌生的概念。在這篇文章中將要討論托管堆,...
C# 托管資源與非托管資源
C# 托管資源與非托管資源。本來如果按照上面做法,非托管資源也能夠由垃圾回收器進(jìn)行回收,但是非托管資源一般是有限的,比較寶貴的,而垃圾回收器是由CRL自動調(diào)用的,這樣就無法保證及時(shí)的釋放掉非托...
C#釋放資源
托管資源是由CLR全權(quán)負(fù)責(zé)的資源,CLR不負(fù)責(zé)的資源位非托管資源。也就是說,一個(gè)引用類型對象所占用的內(nèi)存需要被GC回收,需要先成為垃圾。那么GC的工作大致是,查詢內(nèi)存中對象是否成為垃圾,然后對垃圾...
對.Net 垃圾回收的C#編程相關(guān)方面(Finalize 和Dispose(bool di...
net中using指令用法,using語句Dispose模式應(yīng)用
net中using指令用法,using語句Dispose模式應(yīng)用net中using指令用法,using語句Dispose模式應(yīng)用 using指令的多種用法。要理解清楚使用using語句強(qiáng)制清理資源,就首先從了解Dispose模式說起,而要了解Di...
微信掃碼,在手機(jī)上查看選中內(nèi)容