Какие управляемые классы в .NET Framework выделяют (или используют) неуправляемую память? - PullRequest
6 голосов
/ 04 октября 2009

Существует ли известный (задокументированный) набор типов .NET, которые выделяют память в неуправляемой части памяти процесса?

Например, Microsoft документирует, что инфраструктура WPF выделяет неуправляемую память для своей модели сохраненного рендеринга, чтобы оптимизировать производительность. Существуют ли другие такие части .NET Framework, которые используют большие объемы неуправляемой памяти?

Ответы [ 3 ]

5 голосов
/ 04 октября 2009

Если он реализует IDisposable, очень вероятно, что он владеет неуправляемыми данными или владеет управляемым классом, который в конечном итоге владеет неуправляемыми данными. Если он имеет Finalize(), это означает, что он напрямую владеет неуправляемыми данными.

Как правило, если он реализует IDisposable, то Dispose(), как только вы закончите.

1 голос
/ 04 октября 2009

Насколько я знаю, нет единого документа, который описывает или идентифицирует, какие классы в структуре используют неуправляемые ресурсы. Документация MSDN для конкретного класса может, но это потребует от вас взглянуть на конкретные классы.

В целом, можно с уверенностью сказать, что многие классы в какой-то момент используют неуправляемый код. Например, многие элементы управления Windows Forms являются просто оболочками вокруг элементов управления Win32, поэтому они используют неуправляемые ресурсы.

0 голосов
/ 04 октября 2009

Вы должны быть осторожны, когда класс реализует IDisposable. Обычно это указывает на использование неуправляемых ресурсов, которые, однако, не ограничиваются памятью, но также могут быть дескрипторами файлов, сокетами и т. Д.

Хороший показатель для этого - когда класс использует IntPtr .

...