Сьогодні інтерв'юер запитав мене про це ... чи є відповідь?
Сьогодні інтерв'юер запитав мене про це ... чи є відповідь?
Відповіді:
System.GC.Collect()змушує збирач сміття працювати. Це не рекомендується, але можна використовувати, якщо виникають ситуації.
Не рекомендується дзвонити gc явно, але якщо ви телефонуєте
GC.Collect();
GC.WaitForPendingFinalizers();
Він буде дзвонити GC прямо в коді, не забудьте зателефонувати GC.WaitForPendingFinalizers();після GC.Collect().
WaitForPendingFinalizersне обов'язково дає "кращу продуктивність": він просто блокує, доки всі об'єкти в черзі завершення не будуть доопрацьовані (об'єкти, які могли бути поміщені туди під час вашого попереднього виклику Collect). Якщо ви хочете, щоб ці об’єкти були зібрані, вам потрібно ще один дзвінок Collect після дзвінка WaitForPendingFinalizers.
WaitForPendingFinalizers?
GC.Collect()
від MDSN ,
Використовуйте цей метод, щоб спробувати повернути всю недоступну пам’ять.
Всі об'єкти, незалежно від того, скільки часу вони перебувають у пам'яті, розглядаються для збору; однак об'єкти, на які посилаються в керованому коді, не збираються. Використовуйте цей метод, щоб змусити систему спробувати повернути максимальний обсяг доступної пам'яті.
Однак майте на увазі, що збирач сміття не завжди може прибрати те, що ви очікуєте ...
Ви не хочете змушувати збирач сміття працювати.
Однак якщо ви коли-небудь це робили (звичайно, як суто академічну вправу):
GC.Collect()
Я думаю, що .Net Framework робить це автоматично, але про всяк випадок. Спочатку обов’язково виберіть те, що ви хочете стерти, а потім зателефонуйте до збирача сміття:
randomClass object1 = new randomClass
...
...
// Give a null value to the code you want to delete
object1 = null;
// Then call the garbage collector to erase what you gave the null value
GC.Collect();
Я думаю, це все .. Сподіваюся, я комусь допоможу.