2015-11-04 3 views
1

Я столкнулся с тем, что метод dispose в C# предназначен для детерминированной сборки мусора, поскольку вы знаете, что объект вызывается при вызове этого метода. Можете ли вы привести простой пример по не детерминированной сборке мусора? Обычно ли это происходит при многопоточности?не детерминированная сборка мусора

Благодаря

+1

Где вы это читали? Это ложь. Вообще говоря, это для детерминированной * ресурсной * очистки (например, освобождения дескрипторов ОС и т. Д.). –

ответ

1

Dispose будет, вообще говоря, не вызывают Garbage Collection. Вместо этого интерфейс IDisposable предназначен для элементов, которые нуждаются в какой-то очистке - например, они могут иметь дескриптор файла, открытый в системе, или вытащить блокировку семафора или что-то в этом направлении. Если вы хотите обеспечить, чтобы сборка мусора происходила на объекте, самое лучшее, что вы можете сделать, это убедиться, что она либо выпадает из области видимости, либо бросает ссылки на объект.

Следует отметить, что если вы взаимодействуете с объектом, который реализует IDisposable, вы все равно должны убедиться, что Dispose() вызывается на объекте, прежде чем вы потеряете ссылку на объект (либо с using блоком, который также будет иметь эффект . уронить его из сферы, когда вы из using блока, или явным вызовом Dispose() на объекте

Резюмируя: IDisposable и Dispose() НЕ о детерминированной мусора, они о сигнализации для объектов сообщите им, что они могут убрать после себя - вы закончили использовать их.

Смежные вопросы