С точки зрения предотвращения утечек памяти, я бы предложил, чтобы при добавлении чего-либо в словарь вы проверяли, было ли выполнено количество сборок мусора. Если число элементов, добавленных между последней проверкой словаря и временем последней коллекции, превышает разумную долю размера словаря (скажем, 10% или некоторое минимальное количество элементов, в зависимости от того, что меньше). ), это будет признаком того, что словарь должен быть найден. Обратите внимание, что этот подход ограничит количество избыточных элементов в словаре до определенной доли размера словаря, предлагая при этом разумную производительность независимо от размера словаря.

я есть коллекция (я пишуСлабый словарь) и мне нужно периодически отбирать мертвые WeakReferences. Обычно я видел проверки в методах Add и Remove, которые говорят: «После X изменений в коллекции, пришло время отбраковать». Это будет приемлемо для меня, но, похоже, должен быть лучший путь.

Мне бы очень хотелось знать, когда GC запускается и запускает мой код очистки сразу после. В конце концов, GC, вероятно, является лучшим механизмом для определения того, когда подходящее время для очистки мертвых ссылок. я нашелУведомления о сборке мусора, но это не похоже на то, что я хочу. Я не хочу создавать отдельную ветку только для мониторинга GC. В идеале моя коллекция будет реализовыватьIWantToRunCodeDuringGC или подписаться наSystem.GC.Collected мероприятие. Но .NET Framework, вероятно, не может доверять пользовательскому коду для запуска во время GC ...

Или, может быть, есть другой подход, который я пропускаю.

РЕДАКТИРОВАТЬ: Я не думаю, что это имеет значение, если мой код выполняется после, до или во время GC.

Ответы на вопрос(3)

Ваш ответ на вопрос