gpt4 book ai didi

c# - 自引用计时器/无法收集的对象

转载 作者:太空宇宙 更新时间:2023-11-03 22:26:07 25 4
gpt4 key购买 nike

我有一个包含计时器的类型,它每 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 .

关于c# - 自引用计时器/无法收集的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1345819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com