Re[3]: WeakReference.IsAlive
От: dshe  
Дата: 22.09.06 12:09
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, xvost, Вы писали:


X>>А ты не спрашивай IsAlive. Ты сразу бери Target. Если объект уже помер, то Target будет null


А>Так нельзя. От класса кэш требуется следующая функциональность:


А>- проверка наличия объекта в кэше;

А>- получение объекта по ключу (не должно быть null, т.е. если проверка показала что оно есть, следует вернуть объект)
А>- автоматическое удаление неиспользуемых объектов

Тогда требования, которые предъявляются к кешу, противоречивы поскольку допускают описанную тобой ситуацию (Contains вернул true, а GetItem -- null).

Можно, правда, еще ввести понятие транзакции и установить, что ни один объект не может быть сколлекчен в ее рамках. И, соответсвенно, вызывать Contains и GetItem в рамках одной транзакции. Для того, чтобы это реализовать тебе скорее всего придется в начале транзакции дампить все элементы кеша в отдельную strong reference коллекцию, а в конце транзакции ее очищать.
...Полагаю, что все-таки, решение при котором GetItem возвращает null, лучше.
--
Дмитро
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.