У нас есть сторонняя библиотека, которая внутренне использует SafeHandle для неуправляемого ресурса. В некоторых случаях ошибки необходимо избавиться от объекта и воссоздать его. Но есть ошибка в реализации dispose, которая препятствует закрытию Handle в подмножестве этих случаев. Это предотвращает успешное создание новых объектов до запуска финализатора.
Было предложено два решения (оба зла), чтобы мы могли устранить сторонний код:
-
Запустите
GC.Collect
, чтобы запустить финализатор и очистить объект -
Используйте отражение, чтобы попасть в Handle и закрыть его, если dispose не удалось сделать это
какая из них менее злая и почему? Есть ли какой-то другой метод, который мы не считали менее злым, чем любой из этих?