Почему массив объектов не освобождается после завершения области действия объекта?
У меня есть объект "class1object", который является членом class2. Я инициализирую его, как показано ниже.
class2{ class1 [] class1object1; public class2() { class1object1=new class1[1000000]; } public void Start() { } }Я использую Class2object в другой функции Start в Class3 и вызываю ее 100 раз.
Class3 { public static void Start() { for(int i=0;i<100;i++) { Class2 class2object=new Class2(); class2object.Start(); } } }
Наконец, функция Start в классе 3 вызывается из класса 4 как статический вызов.
Class4 { void Start() { Class3.Start(); } }Теперь проблема, которую я вижу, - это массив class1object1, который я никогда не очищал и продолжает расти в памяти. Я использовал профилировщик Редгейт для наблюдателя это. размер class1object1 составляет 4 МБ, и при каждом запуске память, используемая этим объектом, увеличивается на 4 МБ. Почему сбор мусора не начинается в какой-то момент? Я запустил его до тех пор, пока он не использовал около 500 МБ памяти. В классе object1 нет неуправляемых членов, даже если он находится в небезопасном объекте кода.
Есть идеи или предложения?
Что я уже пробовал:
Я пробовал профилирования собой. Я пытался использовать неуправляемую память в c#, но не смог сделать этого с stackalloc, потому что мне нужно сохранить переменные в функции и передать их другой функции.