Недавно мне было интересно, есть ли какой-либо недостаток для Set<Weakref<T>>
по сравнению с WeakSet<T>
.
Плюсы:
Минусы:
Я что-то упускаю или это почти беспроигрышная ситуация? Будет ли версия Set<Weakref<T>>
препятствовать сбору мусора сборщиком мусора?
Что вы пропустили:
WeakSets are collections of objects only. They cannot contain arbitrary values of any type, as Sets can.
The number of objects or their traversal order is immaterial, so a WeakSet is more suitable (and performant) than a Set for tracking object references, especially if a very large number of objects is involved.
Set<Weakref<T>>
не помешает GC. Также обратите внимание, что WeakRef
не поддерживается в Opera, а WeakSet
есть.
Превосходно! Я не понимаю, что означает
order is immaterial
. Я понимаю, что разыменование переменных не идеально для производительности, но эта фраза, похоже, говорит и о чем-то другом.