我有一个类型,其中包含一个每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