c# – 是否可以直接创建和使用一次性对象?

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

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

我知道Dispose方法不会被调用,但由于没有引用对象,垃圾回收器如何处理它?使用一次性物品是否安全?

我在我的例子中使用了一个DataTable,因为它是我发现的唯一具体例子,但我的问题一般适用于一次性对象。我不会亲自使用它们,我只是想知道如果它们被这样使用,那么他们是不是很容易被GC处理。

这里的关键问题是调用Dispose的时机,这在您的示例中是未知的(提供了一个很好的实现IDisposable – 见下文)。我会考虑使用一个IDisposable实例,而没有使用语句的代码气味。该类正在实施IDisposable的原因,因此您作为用户应遵守其合同。

但是,请注意,在一个可以容纳的数据库中,该类的终结者处理未处理对象的处置。因此,即使没有在使用中实例化,处理应在未知时间和不同的(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对每个对象调用,除非在每个对象的基础上被禁用)调用将导致调用Dispose。

http://stackoverflow.com/questions/36816475/is-it-safe-to-create-and-use-a-disposable-object-inline

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 是否可以直接创建和使用一次性对象?