Конечно, мы должны вызывать Dispose () для объектов IDisposable, как только они нам не нужны (что часто является просто областью применения «using»). Если мы не примем эту меру предосторожности, то могут произойти плохие вещи, от тонких до выставочных.
Но как насчет "последнего момента" перед завершением процесса? Если ваши IDisposables не были явно удалены к тому моменту времени, не правда ли, что это больше не имеет значения? Я спрашиваю, потому что неуправляемые ресурсы под CLR представлены объектами ядра - и завершение процесса win32 все равно освободит все неуправляемые ресурсы / объекты ядра. Иными словами, после завершения процесса никакие ресурсы не останутся «утечками» (независимо от того, был ли вызван метод Dispose () для устаревших IDisposables).
Кто-нибудь может вспомнить случай, когда завершение процесса все равно оставит утечку ресурса, просто потому, что Dispose () не был явно вызван для одного или нескольких IDisposables?
Пожалуйста, не поймите неправильно этот вопрос: я не пытаюсь оправдать игнорирование IDisposables. Вопрос чисто технико-теоретический.
РЕДАКТИРОВАТЬ: А как насчет моно работает на Linux? Является ли прекращение процесса таким же «надежным» при устранении неуправляемых «утечек»?
ПОЗДНЕЕ РЕДАКТИРОВАНИЕ: хотя для IDisposables могут существовать «иные виды использования», я сосредоточен исключительно на утечках ресурсов. Я слышал два ответа: (1) если ваш процесс откажется завершить, у вас будет утечка и (2) да, ресурсы могут утечь, даже если процесс завершится. Я, конечно, согласен с пунктом (1), хотя он выходит за рамки того, что я преследую. В противном случае пункт (2) - это именно то, что я ищу, но я не могу избавиться от ощущения, что это всего лишь предположение. Джеффри Рихтер («Windows через C / C ++») объясняет, что (изящно) завершенный процесс Win32 не оставит утечек или потерянных ресурсов. Почему процесс, содержащий CLR, изменит это? Где находится документация, конкретный пример или теоретический сценарий, который дает основание полагать, что при очистке CLR возможности очистки процесса скомпрометированы при использовании CLR?