gpt4 book ai didi

c# - 内联创建和使用一次性对象是否安全?

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

我已经多次看到开发人员使用内联一次性对象,here例如。内联我的意思是:

var result = new DataTable().Compute("1 + 4 * 7", null);

我知道 Dispose 方法不会被调用,但由于没有引用对象,垃圾收集器将如何处理它?使用这样的一次性元素安全吗?

我在示例中使用了 DataTable,因为它是我找到的唯一具体示例,但我的问题通常适用于一次性对象。我个人并没有那样使用它们,我只是想知道如果以这种方式使用它们,GC 是否会对其进行不同的处理。

最佳答案

这里的关键问题是调用 Dispose 的时间,这在您的示例中是未知的(提供了 IDisposable 的良好实现——见下文)。我会考虑使用没有 using 语句的 IDisposable 实例代码味道。该类正在实现 IDisposable 是有原因的,因此您作为用户应该遵守它的契约(Contract)。

但是,请注意在 correct implementationIDisposable 类的终结器处理未处置对象的处置。因此,即使using 中实例化,也应执行处置,但时间未知且在不同的(GC 的)线程上。

I just wanted to know if they are handled diffently by the GC if they are used that way.

不,GC 对待所有对象都是一样的,并且不会以任何方式区别对待 IDisposable 实现。但是,在 IDisposable 的正确实现中,Finalize 方法(由 GC 在每个对象上调用,除非在每个对象的基础上被抑制)调用将导致调用 处置

关于c# - 内联创建和使用一次性对象是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36816475/

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