Удалить экземпляр класса / переменной из памяти (полностью)
Я работаю над проектом сокета в C# (.NET). Я работаю с данными с некоторыми классами (пакетами). Когда я смотрю использование памяти, если данные поступают, это идет вверх! а именно создание классов. Как я могу удалить (вручную) классы и неиспользуемые переменные / классы из памяти (не с помощью GC!)?
Если я попробую базовые вещи, такие как только получение данных, это снова идет вверх. На данный момент, я хочу полностью удалить / удалить классы / переменные из памяти!
Кто-нибудь может помочь?
2 ответа
Благо и боль (в некоторых ситуациях), что вы не можете сделать это вручную. Даже заставляя GC.Collect()
вам не гарантировано получить свободную память.
Кроме того, запрос на очистку памяти является запросом, поэтому может произойти с некоторой задержкой, а не сразу.
Так что единственный путь в CLR
Если мы говорим о распределении объектов.NET, очистка памяти такова: очистите ваши объекты, оставьте их без указания на них других объектов, и
подожди
GC
будет собирать их, если будет (зависит от поколения)вызов вручную
GC.Collect()
, это не рекомендуется, но также может быть использовано, кстати, нет гарантии, что память будет очищена.
Для дальнейшего чтения: что такое "Поколения в сборке мусора"?
Ты не можешь Вы не можете удалять объекты вручную в C#. Если сборщик мусора не делает этого автоматически, скорее всего, вы где-то держитесь за объект. Используйте профилировщик, чтобы узнать, где и исправить свой код.