В C # (и в Java), если у вас есть ссылка на объект, программная среда предполагает, что вы все еще используете объект. Призывы к свободной памяти освободят только неиспользуемые объекты. Ключ должен прекратить использование объекта.
Коэффициенты отличные, у вас есть что-то вроде:
Object mine = new Object();
ключ в том, что вам также нужно что-то вроде:
mine = null;
, чтобы указать, что «мой» объект больше не используется. Обычно такие проблемы не возникают в таких блоках кода, потому что после того, как вы покинете блок, переменные больше не доступны:
public void process() {
Object mine = new Object();
}
Обычно такие проблемы возникают в таких блоках кода, потому что коллекция накапливает объекты с течением времени:
static List tasks = new ArrayList();
public void process(String item) {
tasks.add(item);
}
Ключ в том, что без соответствующего tasks.remove(item)
список будет содержать ссылки на элементы, навсегда мешающие работе по сбору мусора.