Как почистить коллекцию слабых ссылок? - PullRequest
3 голосов
/ 05 декабря 2011

У меня есть коллекция, которая заполнена слабыми ссылками на объекты в приложении.Что является лучшим способом убрать просроченные ссылки такой коллекции.Это хорошая идея, чтобы иметь объект таймера, который периодически ищет мертвые ссылки и удаляет их?Есть ли лучший способ сделать это в C # .NET?РЕДАКТИРОВАТЬ: В моем сценарии коллекция будет создана один раз для приложения и будет существовать во время работы приложения, поэтому будет увеличиваться в размере.Важно сохранить его размер.

Я бы предпочел решения для версии 3.5 платформы или более ранней.Спасибо.

Ответы [ 2 ]

4 голосов
/ 05 декабря 2011

Выполнение этого по таймеру может быть излишним, и возникает проблема параллелизма.

А как насчет очистки мертвых ссылок как части какой-либо другой операции?Например, если это список и порядок не важен, то добавление нового элемента может заменить первую найденную мертвую ссылку новой, а не добавлять ее в конец.Или запускайте развертку всякий раз, когда какое-то событие, которое вы не ожидаете, слишком часто происходит - возможно, когда поиск извлекает мертвую ссылку.

1 голос
/ 05 декабря 2011

Вы можете запустить поток, который чередуется между

  • , ожидающим завершения полной сборки мусора
  • , исключая нежелательные слабые ссылки.

http://msdn.microsoft.com/en-us/library/system.gcnotificationstatus.aspx

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

...