我有一個類型,其中包含一個每2秒觸發一次實例方法的計時器。我的問題是,當對象實例退出作用域時,不會收集對象,因爲計時器線程維護引用。自引用計時器/不可收集對象
我的問題是;是否有可能在運行時確定對象具有多少引用,並且引用計數是1是否引用對同一對象的循環引用?基本上我正在考慮向定時器回調中添加代碼來停止定時器,如果對象只有1個循環引用,則將堆棧引用設置爲空。
感謝
public class TypeWithSelfRefresh<T>
{
private readonly IList<T> _cache = new List<T>();
private Timer _refreshTimer;
public TypeWithSelfRefresh()
{
_refreshTimer = new Timer(delegate { ClearCache();},null,2000,2000);
}
public void ClearCache()
{
lock (_cache)
{
_cache.Clear();
}
}
public void Add(T item)
{
lock (_cache)
{
_cache.Add(item);
}
}
public IEnumerable<T> GetItems()
{
lock (_cache)
{
foreach (T item in _cache)
{
yield return item;
}
}
}
}
'WeakReference'應該很好地解決這個問題。 – 2009-08-28 09:36:46