sách gpt4 ai đã đi

.net - 了解 ConditionalWeakTable

In lại 作者:行者123 更新时间:2023-12-03 20:18:41 34 4
mua khóa gpt4 Nike

Tôi muốn biết ConditionalWeakTable .和有什么区别

class ClassA
{
static readonly ConditionalWeakTable OtherClassTable
= new ConditionalWeakTable();
}


class ClassB
{
OtherClass otherClass;
}

?使用 ClassA 或 ClassB 引用可空字段的优缺点是什么?

1 Câu trả lời

我不完全明白你在问什么,我想虽然你在问你是否应该在你的类型或 ConditionalWeakTable 中使用属性,您可以为该特定类型实例附加这样的属性。如果是这样,您也可以询问是否应该单独使用属性而不是字典,字典可以在特定键下包含此属性(这将是您的特定类型实例)。除非你需要这样的字典,否则这很废话。

了解ConditionalWeakTable :

Cái gìConditionalWeakTable实际上,它允许您将附加信息附加到现有的、托管的、非动态的 CLR 对象。本质上它可以被理解为一个字典,其中键被弱引用,因此只要键还活着,值就会保持事件状态。更多信息请访问 MSDN .

所以,你应该问问自己,你的需求是什么。假设您的类型已实例化:

var classA = ClassA(); 
var classB = ClassB();
var other = OtherClass();

您是否想以这种方式使用绑定(bind)到此类实例的属性:
/* set */
var other = new OtherClass();
ClassA.OtherClassTable.Add(classA, other);
/* get */
OtherClass data = null;
var result = ClassA.OtherClassTable.TryGetValue(classA, out data);

而不是下面这个?
/* set */
classB.OtherClass = other;
/* get */
var result = classB.OtherClass;

除非有特殊需要,否则答案似乎很明显。这里当然还有其他问题:

什么是弱引用,为什么要使用它?

这个 MSDN文章简短地解释了这个话题。它基本上说弱引用不会延长对象的生命周期,因为一旦应用程序代码仍然可以访问这样的对象,它就可以被垃圾回收。弱引用可用于指向应该可用于 GC 的对象(如果它们没有被主动使用)。但是,如果程序使用大量小对象,弱引用会对内存使用产生负面影响。像 cái này 这样的主题和 cái này还应该澄清一些遗留的疑问。

如果您正在寻找示例,何时可以使用 ConditionalWeakTable超标 Dictionary ,想象以下情况。您希望在运行时将属性字典绑定(bind)到实例,但同时又不想在您停止主动使用它们时阻止它们被收集。不幸的是,在标准方法中这是不可能的 - GC 被阻止,因为字典仍然持有对它们的强引用,如下所示:
var x = new object();
x.Props().Y = "hello";

static class ExpandoExtensions
{
private static IDictionary props =
new Dictionary();
public static dynamic Props(this object key)
{
dynamic o;
if (!props.TryGetValue(key, out o)){
o = new ExpandoObject();
props[key] = o;
}
return o;
}
}

当然,您总是可以手动删除它们,但是下面显示的这种方法不是更简单吗?
static class ExpandoExtensions
{
private static readonly ConditionalWeakTable props =
new ConditionalWeakTable();

public static dynamic Props(this object key)
{
return props.GetOrCreateValue(key);
}
}

同时( MSDN)

avoid using weak references as an automatic solution to memory management problems. Instead, develop an effective caching policy for handling your application's objects.



上面显示的这些扩展方法取自 chủ đề .

关于.net - 了解 ConditionalWeakTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18465630/

34 4 0
Bài viết được đề xuất: java - 类之间的 Java 中的 JNI 作用域
Bài viết được đề xuất: line-breaks - 在 IRC 消息中插入换行符
Bài viết được đề xuất: gradle - 如何使用 Gradle 从 distZip 中排除文件?
Bài viết được đề xuất: io - 在 FreeBSD 上查找具有大量磁盘 I/O 的进程
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com