Mam niektóre obiekty, które odczytują plik, zapisują dane w tablicach i wykonują niektóre operacje. Sekwencja to Utwórz obiekt A, operuj z obiektem A. Utwórz obiekt B, operuj obiektem B ... Dane odczytywane przez każdy obiekt mogą wynosić około 10 MB. Najlepszym rozwiązaniem byłoby usunięcie każdego obiektu po pracy z każdym z nich. Powiedzmy, że chcę, aby mój program przeznaczyć około 10 MB pamięci, a nie 10MB * 1000 Objects 1GBKonieczność usuwania obiektów: implementacja Usunąć lub utworzyć obiekty w funkcji?
Obiekty są czymś jak:
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()
{
...
}
}
Moje pytanie brzmi: należy wdrożyć wyrzucać? I zrobić coś takiego:
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());
}
...
Ive przeczytać, że wdrożenie Jednorazowe jest zalecane podczas korzystania z zasobów unmmanaged (gniazda, strumienie, ...), ale w mojej klasie mam tylko dużych tablic danych.
Innym sposobem byłoby stworzenie funkcji dla poszczególnych obiektów (przypuszczam GC usunie obiekt utworzony w funkcję automatycznie):
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());
}
Edytowałem twój tytuł. Zobacz, "[Czy w tytułach pytania powinny znaleźć się" znaczniki "?] (Http://meta.stackexchange.com/questions/19190/)", gdzie konsensus brzmi "nie, nie powinien". –