關於Dispose 的問題

2021-03-31 08:56:31 字數 561 閱讀 5940

當我懷著美好的心情翻閱dot***文件的時候,dispose令人厭惡的進入了我的視線。

首先,我意識到文件裡面所說的,某些物件必須手工呼叫dispose,並不是一句玩笑話。文件裡面提到的這個要求是嚴肅的認真的。比如sqlconnection,雖然你不手工呼叫dispose或者close在某些情況下也可以,因為系統會在某些情況下自動呼叫那些;但是在另外一些情況下,不呼叫dispose或者close將會導致連線池迅速被消耗乾淨。

其次,dispose讓我非常沮喪的感覺到,這並不比c++奇妙的heap記憶體指標更容易控制。剛才我們已經確定,dispose(或者類似的替代方法)對於某些物件是必須手工呼叫的,否則就容易出問題。ok,接下我發覺,如果我們在某個地方忘了釋放,我們幾乎無法確認到底哪個該死的地方忘了釋放;而那個遺忘的地方,可能恰恰是導致資源耗盡的地方;而且直到資源耗盡之前,你幾乎不可能發現這個問題;而且資源耗盡的時候,你並沒有辦法察覺資源是何時由誰耗盡的。如果在乙個大的專案模組裡面發現了這樣乙個問題,肯定會有人要發瘋;因此有人說dot***並不適合大專案,多少是有點道理的。相比之下,c++的heap記憶體指標雖然也是需要釋放,但是我們至少可以很容易的檢測出記憶體洩漏來。

C Finalize和Dispose的區別

一 總結 1 finalize方法 c 中是析構函式,以下稱析構函式 是用於釋放非託管資源的,而託管資源會由gc自動 所以,我們也可以這樣來區分 託管和非託管資源。所有會由gc自動 的資源,就是託管的資源,而不能由gc自動 的資源,就是非託管資源。在我們的類中直接使用非託管資源的情況很 少,所以基本...

C Finalize和Dispose的區別

一 總結 1 finalize方法 c 中是析構函式,以下稱析構函式 是用於釋放非託管資源的,而託管資源會由gc自動 所以,我們也可以這樣來區分 託管和非託管資源。所有會由gc自動 的資源,就是託管的資源,而不能由gc自動 的資源,就是非託管資源。在我們的類中直接使用非託管資源的情況很 少,所以基本...

C 的Dispose模式複習

using system using system.collections.generic using system.text namespace perfectfinalizedispose 這裡實現了idispose中的 dispose方法 public void dispose 在這裡做實際的...