gpt4 book ai didi

.net - 为什么最好不要使用 finalize 进行清理? 。网

转载 作者:行者123 更新时间:2023-12-02 00:04:43 25 4
gpt4 key购买 nike

(Windows API 创建的对象、文件、数据库连接对象、COM 对象等)在 .NET Framework 的范围之外。我们必须明确地清理我们的资源。对于这些类型的对象,.NET Framework 提供了 Object.Finalize 方法,可以重写该方法并清理非托管资源的代码...

  1. 为什么最好不要使用 finalize 进行清理?

  2. 用什么合适?

最佳答案

首选方法是实现 IDisposable 以及 dispose pattern .终结器是有时间限制的,如果终结器阻塞时间过长,GC 将终止它 - 这是尽可能避免它的主要原因。

Dispose 只是一个方法调用,没有时间限制。对于调用者忘记调用 Dispose(因为它不是强制执行的)作为释放资源的最后尝试的情况,dispose 模式可选择具有终结器。如果调用了处置,该模式还会抑制终结器。

我遇到的需要终结器的唯一有效用途是用于我为第三方应用程序编写的一系列加载项,这些应用程序不会引发相关事件以正确管理对象生命周期。我使用终结器来确保我至少尝试清理东西。除此之外,我从未直接依赖它。

IDisposable 在 C# 中使用 using 关键字来满足。任何实现这个接口(interface)的东西都可以这样使用:

using (var myDisposableItem = new MyDisposableItem())
{
} // Dispose will be called here for you.

所以从调用的角度来看,这非常简单。

.NET Framework 中有多种类型实现了 IDisposable 但没有任何可处理的。我总是建议他们表现得好像他们需要直接处理一样,因为公共(public)契约(Contract)规定他们有东西要处理,即使实现没有。不要针对实现细节进行编程。

关于.net - 为什么最好不要使用 finalize 进行清理? 。网,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19154005/

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