У меня есть часть кода, которая работает с большими массивами double
(содержит минимум 6000 элементов) и выполняется несколько сотен раз (обычно 800).
Когда я использую стандартный цикл, вот так:
double[] singleRow = new double[6000];
int maxI = 800;
for(int i=0; i<maxI; i++)
{
singleRow = someObject.producesOutput();
//...
// do something with singleRow
// ...
}
Использование памяти увеличивается примерно на 40 МБ (с 40 МБ в начале цикла до 80 МБ в конце).
Когда я заставляю использовать сборщик мусора для выполнения на каждой итерации, использование памяти остается на уровне 40 МБ (увеличение незначительно).
double[] singleRow = new double[6000];
int maxI = 800;
for(int i=0; i<maxI; i++)
{
singleRow = someObject.producesOutput();
//...
// do something with singleRow
// ...
GC.Collect()
}
Но время выполнения в 3 раза больше! (это важно)
Как заставить C # использовать одну и ту же область памяти вместо выделения новых?
Примечание. У меня есть доступ к коду класса someObject
, поэтому, если он понадобится, я могу его изменить.