C# ではusing
、実装するすべてのもので使用できますIDisposable
。なんで?using は単なるシンタックス シュガーだからです。using(obj){/*somecode*/}
実際には次のようなものです:
try
{
/*somecode*/
}
finally
{
if(obj!=null) obj.Dispose();
}
Typed を使用している場合DataSet
、自動生成されたクラスがオーバーライドしないことに気付いたかもしれませんDispose(bool)
。自動Dispose
生成されたテーブルと列には何もしません。Dispose(bool)
自動生成された TypedDataSet (部分ファイル内) でオーバーライドして、データ セットのメモリを解放する (実際に問題がある) のを支援します。次のようにします。
protected override void Dispose(bool disposing)
{
foreach (DataTable tab in this.Tables)
{
if (tab != null)
{
tab.Clear();
tab.Columns.Clear();
tab.Dispose();
}
}
this.Tables.Clear();
base.Dispose(disposing);
}
そして今using
、これSataSet
を使用することは理にかなっています。