问题标签 [finalizer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
159 浏览

c# - CodeDom 的终结器?

是否可以将终结器添加到 CodeDom 生成的类(除了使用 CodeSnippetTypeMember)?

我在 MSDN 上找不到任何有关它的信息。

0 投票
4 回答
10475 浏览

vb.net - 实施 Dispose 还是 Finalize?

0 投票
5 回答
735 浏览

.net - 在终结器中访问引用类型成员变量是否安全?

换句话说,

0 投票
4 回答
284 浏览

java - 测量创建和销毁一个简单对象的时间

来自 Effective Java 第 2 版第 7 条:避免终结器

“哦,还有一件事:使用终结器会严重影响性能。在我的机器上,创建和销毁一个简单对象的时间约为 5.6 ns。添加终结器会将时间增加到 2,400 ns。换句话说,使用终结器创建和销毁对象的速度大约慢了 430 倍。”

如何衡量创建和销毁对象的时间?你只是这样做:

0 投票
5 回答
11550 浏览

c# - 当我们没有析构函数时为什么要调用 SuppressFinalize

我有几个问题我无法得到正确的答案。

1)当我们没有析构函数时,为什么要在 Dispose 函数中调用 SuppressFinalize 。

2) Dispose 和 finalize 用于在对象被垃圾回收之前释放资源。无论是托管资源还是非托管资源,我们都需要释放它,那么为什么我们需要在 dispose 函数中添加一个条件,当我们从 IDisposable:Dispose 调用这个被覆盖的函数时说 pass 'true' 并在从 finalize 调用时传递 false 。

请参阅我从网络复制的以下代码。

如果我删除布尔受保护的 Dispose 函数并实现如下。

0 投票
3 回答
454 浏览

c# - 如何处理 C# 类中 ctor 和 finalizer 都抛出异常的所有异常?

在某些情况下,如何处理类似于以下的类的所有异常?

我试过这个但它不起作用:

我也尝试过使用“使用”,但它不处理从 ~Test(); 抛出的异常;

有什么想法可以解决吗?

0 投票
2 回答
1160 浏览

c# - 为什么“Finalize 方法不应引用任何其他对象”?

我一直在思考为什么不建议finalize里面释放托管资源。如果您在http://msdn.microsoft.com/en-us/library/system.gc.suppressfinalize.aspx看到代码示例,并搜索字符串“Dispose(bool disposing) 在两个不同的场景中执行”并阅读评论,你会明白我的意思。

我能想到的唯一可能性是,它可能与无法预测何时调用终结器这一事实有关。有谁知道正确答案?

谢谢,米沙尔

0 投票
2 回答
5484 浏览

c# - c#终结器抛出异常?

引用 MSDN:

如果 Finalize 或 Finalize 的覆盖引发异常,运行时将忽略该异常,终止该 Finalize 方法,并继续完成过程。

但是,如果我有:

那么它会导致运行时异常吗?

ps 我知道这永远不会发生,但是我只是对这种行为感到好奇。我们的一个客户在他们所有的终结器周围都有一个空的尝试捕获..它甚至没有记录出现问题或重新定位对象:/

0 投票
1 回答
115 浏览

.net - 是否允许终结器调用其他托管类的方法?

正如 Overriding the Finalize 方法Object.Finalize 文档中所解释的那样,我曾经很确定答案是否定的。

但是,在 Reflector 中随机浏览FileStream时,我发现它实际上可以从终结器中调用这样的方法:

我开始想知道由于其编写方式的确切原因,这是否总是有效,因此“不要接触终结器中的托管类”是否只是一个指南,只要有充分的理由和必要的知识就可以打破它对。

我挖得更深一点,发现当“规则”被打破时可能发生的最坏情况是正在访问的托管对象已经完成,或者可能在单独的线程上并行完成。因此,如果 SafeFileHandle 的终结器没有做任何会导致后续调用 Dispose 失败的事情,那么上面应该没问题......对吗?

问题:那么毕竟可能存在这样的情况,即可以从终结器可靠地调用另一个托管类上的方法?我一直认为这是错误的,但这段代码表明这是可能的,并且有足够好的理由这样做。

奖励:观察到,SafeFileHandle甚至不会知道它是从终结器调用的,因为这只是对Dispose(). 基类 ,SafeHandle实际上有两个私有方法,InternalDisposeInternalFinalize, 在这种情况下InternalDispose会被调用。这不是问题吗?为什么不?...

0 投票
6 回答
6854 浏览

java - 为什么终结器会有“严重的性能损失”?

有效的 Java 说:

使用终结器会导致严重的性能损失。

为什么使用终结器销毁对象会更慢?