2012-03-12 3 views
-1

У меня недавно возникли некоторые проблемы с утечкой памяти с помощью собственного корневого поставщика услуг .NET, поскольку он полагался на неуправляемый код. Единственное, что я натолкнулся на SO, было this сообщение, но оно не попадало слишком много, не говоря уже о том, чтобы предоставить хороший список преступников.Общие классы .NET, которые полагаются на неуправляемые ресурсы

Да, если он реализует IDisposable, он, вероятно, использует какие-то неуправляемые ресурсы где-то, но я хотел бы поместить список вместе определенных классов, которые обычно используются вместо простого поиска Dispose в Intellisense.

Те, которые я наткнулся, что заставило меня неприятности были:

  • AesCryptoServiceProvider
  • ICryptoTransform

То, что другие, которые полагаются на неуправляемых ресурсах люди знает? Есть ли какие-то особенно коварные, которые, похоже, полностью управляются, но нет? Заранее спасибо.

+1

Это не место для таких вопросов. Это слишком открыто (и приведет к слишком большому числу ответов) для нашего формата Q & A. – Oded

+0

Извинения. Я подумал, могу ли я собрать не ужасно огромный список некоторых распространенных, но неожиданных случаев, когда имелись основные неуправляемые проблемы, которые могли бы быть полезны людям. – kmarks2

+0

Несомненно, это было бы полезно. StackOverflow просто не для этого. – Oded

ответ

5

Список этих классов был бы огромным. Большая часть фреймворка обертывает собственные вызовы Windows API, поэтому многие части содержат обертки вокруг собственных ресурсов.

Это будет включать в себя большинство реализаций Stream, что-нибудь обертывающее дескриптор ожидания, большинство реализаций сетей/сокетов, а также большинство классов, связанных с UI (особенно что-то, что обертывает HWND).

+0

Да, это было бы огромно. Меня интересуют обычные люди, которые сталкиваются с некоторой регулярностью. Также мне интересно, какие классы неожиданно используют неуправляемые ресурсы. – kmarks2

+1

@ kmarks2 Поиск IDisposable, вероятно, будет лучшим способом его найти. Не то, чтобы все IDisposable-реализации обертывали ресурсы, но это было бы хорошей отправной точкой. Я дал вам несколько более крупных категорий, которые это делают. –

1

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

Но, как пример коварного человека, люди часто забывают, что System.DirectoryServices.SearchResultCollection class cannot release all of its unmanaged resources when it is garbage collected. Чтобы предотвратить утечку памяти, вы должны вызвать метод Dispose, когда объект SearchResultCollection больше не нужен.

+0

Подавляющее большинство классов IDisposable обрабатывают только управляемые ресурсы. –

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

  • Нет связанных вопросов^_^