IDisposableを破棄しない場合の結果は、パフォーマンスへの影響がごくわずかであることから、アプリがクラッシュすることまでさまざまです。
例のBrushオブジェクトは、GCによってクリーンアップされます。しかし、あなたのプログラムは、以前にそれをクリーンアップすることによって得たであろうその少しの余分なメモリの恩恵を受けていなかったでしょう。多数のBrushオブジェクトを使用している場合、これは重要になる可能性があります。GCは世代別のガベージコレクターであるため、オブジェクトがあまり長く存在しない場合は、オブジェクトのクリーンアップにも効率的です。
一方、データベース接続オブジェクトを破棄しないと、プールされたデータベース接続がすぐに不足し、アプリがクラッシュする可能性があります。
どちらかを使用
using (new DisposableThing...
{
...
}
または、オブジェクト内のIDisposableへの参照を存続させる必要がある場合は、オブジェクトにIDisposableを実装し、IDisposableのDisposeメソッドを呼び出します。
class MyClass : IDisposable
{
private IDisposable disposableThing;
public void DoStuffThatRequiresHavingAReferenceToDisposableThing() { ... }
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
//etc... (see IDisposable on msdn)
}