Я пишу приложение, которое создаст тысячи мелких объектов и сохранит их рекурсивно в массиве. «Рекурсивно» я имею в виду, что каждый экземпляр K будет иметь массив экземпляров K, который будет иметь и массив экземпляров K и т. Д., И этот массив + одно int-поле являются единственными свойствами + некоторые методы. Я обнаружил, что использование памяти растет очень быстро даже для небольшого количества данных - около 1 МБ), а когда данные, которые я обрабатываю, составляют около 10 МБ, я получаю «OutOfMemoryException», не говоря уже о том, когда он больше (у меня 4 ГБ ОЗУ) :). Итак, что вы предлагаете мне делать? Я полагал, что если бы я создал отдельный класс V для обработки этих объектов, так что экземпляры K имели бы только массив из K + одно целочисленное поле и делали бы K как структуру, а не класс, он должен немного оптимизировать вещи - никакой сборки мусора и прочее ... Но это немного сложная задача, поэтому я скорее спрошу вас, хорошая ли это идея, прежде чем я начну переписывать :).Struct vs class memory overhead
EDIT: Ok, некоторые абстрактный код
public void Add(string word) {
int i;
string shorter;
if (word.Length > 0) {
i = //something, it's really irrelevant
if (t[i] == null) {
t[i] = new MyClass();
}
shorterWord = word.Substring(1);
//end of word
if(shorterWord.Length == 0) {
t[i].WordEnd = END;
}
//saving the word letter by letter
t[i].Add(shorterWord);
}
}
}
О нет, есть конец в моем коде, только это может занять некоторое время, прежде чем программа достигает ее ... –
Если есть рекурсии в коде, должно быть концом. Иначе это будет продолжаться вечно и потребует неограниченного количества ресурсов. Убедитесь, что ваши массивы и рекурсия останавливаются в какой-то момент. Проблема здесь кажется, что ваш код продолжается вечно. – iefpw