问题标签 [suppressfinalize]

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 投票
5 回答
130531 浏览

c# - 我什么时候应该使用 GC.SuppressFinalize()?

在 .NET 中,我应该在什么情况下使用GC.SuppressFinalize()?

使用这种方法能给我带来什么好处?

0 投票
5 回答
3918 浏览

c# - IDisposable GC.SuppressFinalize(this) 位置

我为我的代码使用默认的 IDisposable 实现模板(模式)。

片段:

我的问题:为什么在 Dispose 公共方法中调用“GC.SuppressFinalize(this)”?在处置托管资源后,我会将“GC.SuppressFinalize(this)”放在受保护方法的“if (isDisposing)”部分中。

像这样:

0 投票
1 回答
434 浏览

c# - 在 TimedLock 为什么需要 SuppressFinalize(tl.leakDetector) ?

http://www.interact-sw.co.uk/iangblog/2004/04/26/yetmoretimedlocking

为什么需要这条线?

System.GC.SuppressFinalize(tl.leakDetector);

我本以为终结器不应该被禁止运行向剩余监视器发出警报的代码。

显然,我只查看调试版本。

谢谢

0 投票
5 回答
11550 浏览

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

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

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

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

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

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

0 投票
5 回答
25274 浏览

c# - Dispose() 方法中 GC.SuppressFinalize(this) 的目的是什么?

我有以下代码:

尽管有一条评论解释了与 GC 相关的调用的目的,但我仍然不明白它为什么会在那里。

一旦所有实例不再存在,例如在using块中使用时,对象是否注定要进行垃圾收集?

这将发挥重要作用的用例场景是什么?

0 投票
2 回答
482 浏览

.net - 我应该在 IDisposable AND Finalize 上实施 GC.SupressFinalize 吗?

我的新客户处的代码审查清单具有以下内容 -

实现 Dispose 和 Finalize 的类应该在 Dispose 实现中调用 GC.SupressFinalize

为什么?

它不应该读作实现 IDisposable 接口的类应该在 Dispose 实现中调用 GC.SupressFinalize 吗?

还是我错过了一些愚蠢的东西?

0 投票
5 回答
3500 浏览

c# - C# 语言:垃圾回收、SuppressFinalize

我正在阅读“The C# Language”,第 4 版,它谈到了垃圾收集,如下所示:

“BILL WAGNER:以下规则是 C# 和其他托管环境之间的重要区别。

在应用程序终止之前,调用其所有尚未被垃圾回收的对象的析构函数,除非此类清理已被抑制(例如,通过调用库方法 GC.SuppressFinalize)。”

所以我在这里有几个问题:

  • Q1。为什么 .net 与其他托管环境不同(我想这是暗示 Java?)?有什么特别的设计问题吗?

  • Q2。GC.SuppressFinalize被调用的对象会发生什么?我知道这意味着GC不会调用这些对象的终结器(析构函数),如果是这样,这些对象什么时候会真正被销毁,以便将分配的内存位返回到堆中?否则会出现内存泄漏?

0 投票
3 回答
844 浏览

c# - ReRegisterForFinalize SuppressFinalize 现实生活中的例子

我刚刚在读这篇文章,“<a href="https://web.archive.org/web/20130418095110/http://msdn.microsoft.com/en-us/library/bb985010.aspx" rel=" nofollow">垃圾收集:Microsoft .NET Framework 中的自动内存管理”,作者 Jeffrey Richter,我想不出任何现实生活中使用ReRegisterForFinalize或.NET 的示例SuppressFinalize

谁能给我一些例子?

0 投票
1 回答
183 浏览

c# - 哪个类在其构造函数中调用 SuppressFinalize 以使您的 dispose 调用无用?

有一些类,例如 DataTable,已经在其构造函数中调用了 SuppressFinalize,因此没有必要在其上调用 dispose/use。(因为 dispose 是为了提前释放,但没有什么可以释放)

那么,我想知道此类类的列表或通过反射找到此类类列表的方法?

0 投票
1 回答
1070 浏览

c++-cli - 为什么在 C++ CLI 中手动调用析构函数(通过删除)后不应调用 Finalizer

在参考这篇讨论 C++ CLI 中析构函数和终结器的区别的文章后,我想知道为什么编译器会添加一些指令。抑制析构函数中的finalize?

剂量 finalize 函数不代表“最终,它将被 GC 调用”?

我们是否应该在析构函数和终结器中添加相同的“释放资源”代码?