2013-01-18 64 views
0

作爲標題,處理表格時,全部是form數據和datasets也配置?處理表單時,是否還處理表單數據和數據集?

實施例:

Dim C As New Commands 
C.ShowDialog 
C.Disopse() 

所以C形式含有未設置該datasetsoledbconnections和多個對象。如果不是,釋放內存並釋放所有資源的最佳方法是什麼?

+0

沒有「最好的方法」來釋放內存。您可以使用Using語句釋放資源,或者將它們放在FormClosed事件中。 –

+0

謝謝,但是在form函數和subs中聲明的對象又是如何處理的呢? –

+1

不可以。如果你以前從未聽說過Using語句,那麼一定要拿起一本關於vb.net編程的介紹性書籍。它很重要。 –

回答

0

與其他.NET對象一樣,不能保證在處理表單時將丟棄數據集。這是因爲.NET會不斷監視是否有活動指針指向內存中的對象。如果找不到鏈接,則釋放分配給該對象的內存。這個過程被稱爲garbage collection - CLR的一個特性。

問題是您可以有一個變量指向相同的數據集,在另一個窗體,類和甚至另一個項目中。您可以根據需要產生儘可能多的這些變量。作爲一名開發人員,您必須制定一項策略來控制誰會使用您的對象以及如何使用這些對象。否則,您將永遠不知道是否在任何特定時刻實際處理了特定數據集。

Using clause有助於控制物體的處理,但這不是最終的解決方案。如果你不知道自己在做什麼,你仍然會遇到麻煩。有時您需要將未配置的連接對象有意地傳遞給其他函數,以更精細地控制數據處理。

0

表單的.Dispose()方法用於處理表單使用的非託管GDI資源。由於該方法不知道您可能添加的其他內容,因此您無法確定數據集等項目是否已處理。

您可以希望得到的最好的結果是,由於Dispose() - 表單也高度表明表單即將有資格進行垃圾回收,所以您的其他資源也可能有資格進行垃圾回收。 如果這些類型的Dispose()和終結器模式被正確實現,那麼它很可能是很可能是您的其他項目將盡快處理。多久之後不可能說......這就是爲什麼處理模式存在的原因:當你需要確保非託管資源被立即清理時。

我會建議釋放任何額外資源的方式是覆蓋正常的Windows窗體Dispose()方法。您的Dispose()方法的新實現將使用MyBase關鍵字調用基本實現,並且還可以爲窗體的任何IDisposable成員調用Dispose()。這樣,表單仍然可以正常工作,作爲Using塊的一部分。