2

在 .NET 3.5 中,WeakReference 是否与 String 一起使用,或者我应该将它包装在一个小“类”中以使其与它一起使用?

4

3 回答 3

2

System.String(string在 C# 中) 是一种引用类型,因此没有理由不能完美地与WeakReference. 忽略它在某些方面是一种特殊的引用类型(首先是不可变的)这一事实 - CLR 将其视为引用类型。

话虽如此,另一个 StackOverflow 线程很好地指出,字符串引用可以在许多情况下被“实习”,因此没有观察到与垃圾收集有关的“预期”行为。

于 2009-09-17T12:57:37.077 回答
1

这肯定会与 WeakReference 一起使用而不会出现任何问题,因为 System.String 是一个简单的引用类型。看到您使用 Wea​​kReference 的用例会很有趣,因为它似乎不适合 WeakReference 的“正常”用途。

MSDN 指南

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

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

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

于 2009-09-17T12:55:18.313 回答
0

使用弱引用来指向一个深度不可变的对象通常没有多大意义,尤其是一个不引用任何其他对象的对象。如果数据是有用的,你应该持有一个强有力的参考。如果它没有用,你不应该持有任何参考。WeakReference 的使用仅在弱引用对象的有用性取决于强引用的存在的情况下才真正合适。最常见的这种情况是使用弱引用将信息放入将通过强引用读取的对象中。如果没有人会阅读放入对象中的信息,那么作者就没有理由再为它烦恼了。

于 2010-11-18T00:41:53.043 回答