ファイルを読み取り、データを配列に保存し、いくつかの操作を行うオブジェクトがいくつかあります。オブジェクト A を作成し、オブジェクト A を操作します。 オブジェクト B を作成し、オブジェクト B を操作します。 1 つのオブジェクトが読み取るデータは、10 MB 程度になる場合があります。したがって、最適なオプションは、各オブジェクトを操作した後に各オブジェクトを削除することです。10MB * 1000 オブジェクト = 1GB ではなく、プログラムで約 10 MB のメモリを割り当てたいとします。
オブジェクトは次のようなものです。
class MyClass
{
List<string[]> data;
public MyClass(string datafile)
{
using (CsvReader csv = new CsvReader(new StreamReader(datafile), true))
{
data = csv.ToList<string[]>();
}
}
public List<string> Operate()
{
...
}
}
私の質問は: dispose を実装する必要がありますか? そして、次のようなことをしてください:
List<string> results = new List<results>();
using (MyClass m = new MyClass("fileM.txt"))
{
results.AddRange(m.Operate());
}
using (MyClass d = new MyClass("fileD.txt"))
{
results.AddRange(d.Operate());
}
...
管理されていないリソース (ソケット、ストリームなど) を使用する場合は Disposable の実装が推奨されると読みましたが、私のクラスではビッグ データ配列しかありません。
別の方法は、オブジェクトごとに関数を作成することです (GC は、関数で作成されたオブジェクトを自動的に削除すると思います)。
List<string> results = new List<results>();
results.AddRange(myFunction("fileM.txt"));
results.AddRange(myFunction("fileD.txt"));
public List<string> myFunction(string file)
{
MyClass c = new MyClass(file);
return results.AddRange(c.Operate());
}