У меня есть коллекция (я пишу Слабый словарь ), и мне нужно периодически отбирать мертвые WeakReferences. Обычно я видел проверки в методах Add и Remove, которые говорят: «После X изменений в коллекции, пришло время отбраковать». Это будет приемлемо для меня, но, похоже, должен быть лучший способ.
Мне бы очень хотелось знать, когда GC запускается и запускает мой код очистки сразу после. В конце концов, GC, вероятно, является лучшим механизмом для определения того, когда подходящее время для очистки мертвых ссылок. Я нашел Уведомления о сборке мусора , но это не похоже на то, что я хочу. Я не хочу создавать отдельную ветку только для мониторинга GC. В идеале моя коллекция должна реализовывать IWantToRunCodeDuringGC
или подписаться на событие System.GC.Collected
. Но .NET Framework, вероятно, не может доверять пользовательскому коду, выполняемому во время GC ...
Или, может быть, есть другой подход, который я пропускаю.
РЕДАКТИРОВАТЬ: Я не думаю, что это имеет значение, если мой код выполняется после, до или во время GC.