我有一些对象可以读取文件,将数据保存在数组中并进行一些操作。顺序是创建对象A,对对象A进行操作。创建对象B,对对象B进行操作……每个对象读取的数据可能在10MB左右。所以最好的选择是在对每个对象进行操作后删除每个对象。假设我希望我的程序分配大约 10 MB 的内存,而不是 10MB * 1000 个对象 = 1GB
对象类似于:
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()
{
...
}
}
我的问题是:我应该实施处置吗?并执行以下操作:
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());
}