WeakReference是否适用于String?

时间:2009-09-17 12:45:17

标签: .net string weak-references

在.NET 3.5中,WeakReference是否与String一起使用,还是将它包装在一个小的“类”中以使其与它一起使用?

3 个答案:

答案 0 :(得分:2)

System.String(C#中的string)是一种引用类型,因此没有理由不能使用WeakReference完美地工作。忽略这样一个事实:它在某种程度上是一种特殊的引用类型(不可变,一开始) - CLR将其视为引用类型。

说到这一点,this other StackOverflow thread很好地指出字符串引用在很多情况下都可以“实现”,因此没有观察到垃圾收集的“预期”行为。

答案 1 :(得分:1)

这绝对适用于WeakReference而没有任何问题,因为System.String是一个简单的引用类型。看看你使用WeakReference的用例会很有趣,因为它似乎不适合WeakReference的“正常”使用。

来自MSDN Guidelines

仅在必要时使用长弱引用,因为在完成后对象的状态是不可预测的。

避免对小对象使用弱引用,因为指针本身可能大或大。

避免使用弱引用作为内存管理问题的自动解决方案。相反,要开发一个有效的缓存策略来处理应用程序的对象。

答案 2 :(得分:0)

使用弱引用指向深度不可变对象通常没什么意义,尤其是不引用任何其他对象的对象。如果数据有用,您应该持有强大的参考。如果它没用,你不应该持有任何参考。使用WeakReference只适用于弱引用对象的有用性取决于是否存在强引用的情况;最常见的情况是使用弱引用将信息放入将通过强引用读取的对象中。如果没有人会阅读放入对象的信息,那么作者就没有理由再费心了。