配列要素を削除する場合にremoveとかclearを使用すると配列からは削除されるがメモリ上からは削除されない場合があります。その場合にメモリリークすることがあります。その対策としてDispose属性が存在する場合にはDisposeメソッドを実行し確実にメモリからの解放を行うものとする。その方法を下記に記します。
配列要素を全て削除する拡張クラスを作成します。
public static void RemoveAll<T>(this ICollection<T> values)
{
// nullの時、処理を終了する。
if (values == null)
{
return;
}
// 要素の数分繰り返します。
foreach (var value in values)
{
// IDisposable型の時、Disposeを行います。
IDisposable disp = value as IDisposable;
if (disp != null)
{
disp.Dispose();
disp = null;
}
}
// 要素をクリアします。
values.Clear();
}
{
// nullの時、処理を終了する。
if (values == null)
{
return;
}
// 要素の数分繰り返します。
foreach (var value in values)
{
// IDisposable型の時、Disposeを行います。
IDisposable disp = value as IDisposable;
if (disp != null)
{
disp.Dispose();
disp = null;
}
}
// 要素をクリアします。
values.Clear();
}
使用例
public void OnClick()
{
this.List.RemoveAll();
}
{
this.List.RemoveAll();
}
上記で配列情報がクリアされます。