Несколько вопросов к управлению памятью в.net

Я прочитал несколько идей об управлении памятью в.net, но следующие три вопроса мне без ответа

  1. Неуправляемые ресурсы получают память в той же управляемой куче, которая используется для управляемых ресурсов, и кто ее выделяет (ОС ИЛИ CLR ИЛИ Что-нибудь еще)?
  2. Вызывает ли метод Dispose() для управляемого ресурса R, немедленно освобождает память, занятую этим R, и все другие неуправляемые ресурсы, занятые R
  3. Кто очищает память, занятую неуправляемыми ресурсами (ОС ИЛИ CLR ИЛИ Что-нибудь еще).

Любая помощь приветствуется.

1 ответ

1). Код, который создает неуправляемый ресурс. Например, дескриптор файла Win32 выделяется ядром ОС.

2). Это зависит от реализации метода Dispose для освобождения неуправляемых ресурсов. Например, он может вызвать Win32 CloseHandle, чтобы закрыть дескриптор файла. Управляемый ресурс все еще там, только освобожден через GC.

3). Избавьтесь от реализации метода, обычно вызывая собственные функции.

Другие вопросы по тегам