在.NET 3.5中,WeakReference是否与String一起使用,还是将它包装在一个小的“类”中以使其与它一起使用?
答案 0 :(得分:2)
System.String
(C#中的string
)是一种引用类型,因此没有理由不能使用WeakReference
完美地工作。忽略这样一个事实:它在某种程度上是一种特殊的引用类型(不可变,一开始) - CLR将其视为引用类型。
说到这一点,this other StackOverflow thread很好地指出字符串引用在很多情况下都可以“实现”,因此没有观察到垃圾收集的“预期”行为。
答案 1 :(得分:1)
这绝对适用于WeakReference而没有任何问题,因为System.String是一个简单的引用类型。看看你使用WeakReference的用例会很有趣,因为它似乎不适合WeakReference的“正常”使用。
仅在必要时使用长弱引用,因为在完成后对象的状态是不可预测的。
避免对小对象使用弱引用,因为指针本身可能大或大。
避免使用弱引用作为内存管理问题的自动解决方案。相反,要开发一个有效的缓存策略来处理应用程序的对象。
答案 2 :(得分:0)
使用弱引用指向深度不可变对象通常没什么意义,尤其是不引用任何其他对象的对象。如果数据有用,您应该持有强大的参考。如果它没用,你不应该持有任何参考。使用WeakReference只适用于弱引用对象的有用性取决于是否存在强引用的情况;最常见的情况是使用弱引用将信息放入将通过强引用读取的对象中。如果没有人会阅读放入对象的信息,那么作者就没有理由再费心了。