gpt4 book ai didi

C# - 获取对对象的引用数

转载 作者:可可西里 更新时间:2023-11-01 08:00:24 27 4
gpt4 key购买 nike

我正在尝试为我正在编写的小爱好游戏编写一个简单的资源管理器。这个资源管理器需要做的任务之一是卸载未使用的资源。我可以想到用两种方式做到这一点:

  • 当一个对象不再需要引用资源,它必须调用资源管理器的方法表示不再使用它;或者

  • 当一个对象不再需要引用资源,它只是将其设置为空。然后当要求资源管理器卸载未使用的资源,它得到的引用计数(通过反射?)每个资源。如果引用计数是一个(资源管理器将有对资源的引用),卸载资源。

有没有办法在 C# 中实现第二个解决方案?谢谢。

最佳答案

一些事情。首先,对象不被引用计数;引用计数方案存在循环引用问题,即两个对象相互引用但无法访问,从而导致泄漏。 .NET 使用不使用引用计数的标记清除方法。

其次,虽然使用弱引用的建议并不可怕,但也不是灌篮高手。出于性能原因,您正在构建缓存。 (我假设您对应用程序性能特征的仔细、经验和现实的研究已经令人信服地证明了缓存策略对于实现可接受的性能是必要的;如果不是这种情况,那么您就过早地做出了这些决定。)缓存必须有一个关于何时释放其资源的政策,否则就是内存泄漏。

您怎么知道 GC 策略和您的策略是等效的策略? GC 的设计并未考虑到您的特定性能需求。也就是说,它旨在释放真正是垃圾的资源,而不是为了实现您想到的任何特定性能目标。通过将决定委托(delegate)给 GC,您将放弃根据性能需求调整缓存策略的能力。

关于C# - 获取对对象的引用数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1686416/

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