在C++中,所有你在堆上申請(qǐng)的內(nèi)存空間,必須手動(dòng)釋放掉,否則就會(huì)造成內(nèi)存的泄露。
C#使用了GC(Garbage Collector)來進(jìn)行內(nèi)存的管理以達(dá)到自動(dòng)釋放不需要的內(nèi)存的目的,但是GC并不能做的十分完美,對(duì)于一些非托管資源,GC無能為力,這就要求我們必須手動(dòng)的釋放那么非托管資源。文章來源地址http://www.zghlxwxcb.cn/news/detail-559851.html
托管與非托管資源
- 托管資源:是指由垃圾收集器(GC)管理的內(nèi)存。因?yàn)檫@塊內(nèi)存通過GC自動(dòng)管理,所以我們不用關(guān)心。
- 非托管資源:像Win32編程中的文件句柄,上下文句柄、窗口或網(wǎng)絡(luò)連接等資源都屬于非托管資源。
在庫中能找到的類產(chǎn)生的對(duì)象,都是托管資源。
GC進(jìn)行垃圾回收的時(shí)間和順序?
- GC進(jìn)行垃圾回收的時(shí)間無法確定(當(dāng)然你手動(dòng)調(diào)用GC的垃圾回收方法除外),并且順序也不能確定!也就是說,你先申請(qǐng)的空間有可能在你后申請(qǐng)的空間釋放之后釋放。
- GC對(duì)于實(shí)現(xiàn)析構(gòu)函數(shù)和沒實(shí)現(xiàn)析構(gòu)函數(shù)的類處理方法不一樣,簡(jiǎn)單些說GC對(duì)于實(shí)現(xiàn)了析構(gòu)函數(shù)的類一定會(huì)調(diào)用他們的析構(gòu)函數(shù)。
- 析構(gòu)函數(shù)會(huì)隱式的轉(zhuǎn)換為 Finalize函數(shù),Object.Finalize()方法也不能被重寫。
~Test() { } // 會(huì)隱式的轉(zhuǎn)換為,會(huì)遞歸調(diào)用Finalize方法 protected override void Finalize() { try { // Cleanup statements... } finally { base.Finalize(); } }
解決方案
文章來源:http://www.zghlxwxcb.cn/news/detail-559851.html
到了這里,關(guān)于unity學(xué)習(xí)(垃圾回收,資源釋放)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!