首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在什么情况下GC.WaitForPendingFinalizers()阻塞在.NET中?

在什么情况下GC.WaitForPendingFinalizers()阻塞在.NET中?
EN

Stack Overflow用户
提问于 2012-10-04 08:03:55
回答 2查看 1.1K关注 0票数 2

引用GC.WaitForPendingFinalizers()的MSDN文档

运行终结器的线程未指定,因此无法保证此方法将终止。

我不太明白这句话。这种方法在什么情况下不终止?这与终结器运行的线程有什么关系?为什么他们说线程是“未指定的”?

关于终结器线程,我假设以下内容是正确的(?):

  • 只有一个终结器线程。
  • 终结器总是在一个单独的线程上运行(即从未在主线程上运行,也没有在任何其他用户创建的线程上运行)。

注意:我可以想象,当其中一个终结器被阻塞时,这个方法会阻塞,但是无论对终结器使用什么线程,都存在这个问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-04 08:13:19

来自关于MSDN的另一篇文章

在下列特殊情况下,Finalize方法可能无法运行到完成,或者根本不运行:

  • 另一个终结器无限期地阻塞(进入无限循环,尝试获得它永远无法获得的锁,等等)。因为运行时试图运行终结器才能完成,因此如果终结器无限期阻塞,则可能不会调用其他终结器。
  • 进程终止,而不给运行时一个清理的机会。在这种情况下,运行库对进程终止的第一个通知是DLL_PROCESS_DETACH通知。
票数 2
EN

Stack Overflow用户

发布于 2012-10-04 08:10:21

首先,除了SuppressFinalize之外,通常不需要在GC类中使用方法。大多数其他方法通常会使您的应用程序性能最差,而不是更好。

但是,为了回答您的问题,据我所知,在执行收集时,有内部列表由终结器的垃圾收集器保存,和它们都顺序运行在同一个线程上。这意味着,如果一个终结器块,那么我猜这个方法也会阻塞。

当应用程序域关闭时,所有终结器都有一个完成时间限制,在这种情况下,我想这并不重要。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12731280

复制
相关文章
PCB阻焊是什么?
PCB阻焊,也叫PCB防焊,PCB阻焊膜,英文为Solder Mask or Solder Resist,采用绿色等感光油墨喷涂于PCB电路板表层。
硬件开源小站
2023/04/24
1.8K0
什么是忆阻器?
前两天听AI芯片的报告,有位教授提到了基于忆阻器的AI芯片,今早刚好DeepTech深科技里报道了密歇根大学在这方面的进展(基于忆阻器的AI芯片)。借此机会,小豆芽搜集了下相关资料,深入了解下忆阻器。
光学小豆芽
2020/08/13
3K0
什么是水阻柜液阻柜水电阻液态电阻起动柜
水阻,顾名思义,即水电阻由于电动机直接起动时,起动电流会达到电机额定电流的7~8倍,一般上一级变压器的容量都承受不了,特别是大功率的电机,必须加装起动设备,否则会造成变压器局部下跳闸。
国网孟工
2022/07/30
9240
什么是水阻柜液阻柜水电阻液态电阻起动柜
在C#中ref和out具体怎么使用?在什么情况下使用?
ref是传递参数的地址,out是返回值,两者有一定的相同之处,不过也有不同点。   使用ref前必须对变量赋值,out不用。   out的函数会清空变量,即使变量已经赋值也不行,退出函数时所有out引用的变量都要赋值,ref引用的可以修改,也可以不修改。   区别可以参看下面的代码应该就明白了:
zls365
2020/08/19
2.8K0
在 Asp.Net Core 中什么是认证和授权
认证(Authentication) 和 授权(Authorization)在 Asp.Net core 充当了两个不同的职责。有的老伙计在理解的时候还存在误解。本文我们将会通过一些简单的例子来说明这两个概念。
newbe36524
2023/08/23
2270
在什么情况下Java比C++快?
这是根据我同时使用C++和Java工作超过20年所学到的,其实使用Java比C++还要早几年: 1、根据我的经验,当你把优化过的C++代码转换成Java代码,代码的速度会慢大约三倍。 2、根据我的经验,把Java代码转换成C++的代码,速度同样也会慢三倍。首先,这种比较根本没有意义,除非你能意识到用Java的方式去写Java代码,而不是像C++开发者那样去组织C++代码。 3、对于并发的数据结构使用Java往往更有效率。当数据结构不是并发使用时,JVM会消除内存屏障和同步,并倾向使用基于运行时性能分析的并发
李海彬
2018/03/22
8150
在 Asp.Net Core 中什么是认证和授权
认证(Authentication) 和 授权(Authorization)在 Asp.Net core 充当了两个不同的职责。有的老伙计在理解的时候还存在误解。本文我们将会通过一些简单的例子来说明这两个概念。
newbe36524
2023/02/08
1.4K0
在 Asp.Net Core 中什么是认证和授权
HashMap在并发情况下为什么造成死循环?
这个问题是在面试时常问的几个问题,一般在问这个问题之前会问Hashmap和HashTable的区别?面试者一般会回答:hashtable是线程安全的,hashmap是线程不安全的。
java之旅
2020/03/07
1.8K0
Spring事物(@transactional注解)在什么情况下会失效,为什么?
2、加了此注解后每个业务方法执行时,都会开启一个事务,不过都是按照相同的管理机制。
凯哥Java
2022/12/16
6960
在.Net Core中记录日志
一个完善的系统,必然会有非常完善的日志记录,用户的操作、系统的运行状况等信息被完整的记录下来,方便我们对系统进行维护和改进。.net core 也为日志记录提供了内置的支持。
拓荒者IT
2019/09/23
1.3K0
在.NET中调用存储过程
因为做项目要用到数据库,因此存储过程是必不可少的,看了一点如何在.NET中调用存储过程的资料,颇有点心得,觉得这个东西是当用到数据库的时候必须要会的一项技术。下面是它的定义:
SAP梦心
2022/05/07
2.2K0
在 .NET Core 中运行 JavaScript
在 .NET Framework 时,我们可以通过V8.NET等组件来运行 JavaScript,不过目前我看了好几个开源组件包括V8.NET都还不支持 .NET Core ,我们如何在 .NET Core 中运行 JavaScript 呢,答案是使用 NodeServices。关于为何有在 .NET Core 中执行 JavaScript 这种需求,比较特殊,举个栗子:当你做模拟登录时,目标网站可能采用一些加密算法来计算特殊的值,如果你要完全模拟,那么除了用C#翻译这个算法还有个办法就是直接将这段加密算法JS代码拷贝使用C#来执行。还举个栗子:SPA服务端渲染,比如Angular、 React等。
晓晨
2019/03/20
3.9K0
在 .NET Core 中运行 JavaScript
抽象类和接口在什么情况下适用?
上篇文章《抽象类不能实例化》中,我在文章最后顺嘴提了一下接口,就是当时讲抽象类的时候说接口也是抽象类,是个特殊的抽象类。
用户7656790
2021/01/28
3470
抽象类和接口在什么情况下适用?
抽象类和接口在什么情况下适用?
大家在比较抽象类和接口的区别时,一定要强调抽象类描述的是事物的本质,而接口描述的是事物的功能。
程序员小猿
2021/01/19
5180
在什么情况下,Java比C++慢很多?
垃圾回收器。这是一把“双刃剑”。如果你的程序遵循“大部分对象都在年青代中消亡”模型,垃圾回收器是非常有利的(很少的碎片,更好的缓存局部性)。但是,如果程序不遵循该模型,JVM将花费很多资源来回收堆内存。
哲洛不闹
2018/09/19
9640
FPGA中的INOUT接口和高阻态
除了输入输出端口,FPGA中还有另一种端口叫做inout端口。如果需要进行全双工通信,是需要两条信道的,也就是说需要使用两个FPGA管脚和外部器件连接。但是,有时候半双工通信就能满足我们的要求,理论上来说只需要一条信道就足够了,而FPGA上实现这一功能的管脚就是inout端口。管脚相连时,input对应output,因此inout只能和inout连接(否则就不是inout了)。本文将概述FPGA的inout端口。
瓜大三哥
2019/06/05
3K0
FPGA中的INOUT接口和高阻态
什么是 useRef , useRef 与 createRef 区别, 以及在什么情况下使用 useRef
前言: 这篇文章会假设你已经对 react hook 有一些基础的了解. 主要讨论什么是 useRef , useRef 与 createRef 的区别, 以及在什么情况下使用 useRef .
前端迷
2020/02/19
9.1K0
什么是 useRef , useRef 与 createRef 区别, 以及在什么情况下使用 useRef
JavaScript类型在什么情况下会发生类型自动转换
大家都知道 JavaScript 是弱类型语言,而且 JavaScript 声明变量的时候并没有预先确定的类型,变量的类型就是其值的类型,也就是说变量当前的类型由其值所决定,夸张点说上一秒种的String,下一秒可能就是个Number类型了,这个过程可能就进行了某些操作发生了强制类型转换。虽然弱类型的这种不需要预先确定类型的特性给我们带来了便利,同时也会给我们带来困扰,为了能充分利用该特性就必须掌握类型转换的原理。
Javanx
2019/09/04
9270
JavaScript类型在什么情况下会发生类型自动转换
Autofac在.NET Core 中的使用
Autofac 是一款.NET IoC 容器 . 它管理类之间的依赖关系, 从而使应用在规模及复杂性增长的情况下依然可以轻易地修改 。.NET CORE 中也内置了依赖注入,但是有些情况下需要用到Autofac去进行依赖注入,Autofac支持的所有注入方式以外,还支持属性注入和方法注入。接下来我们通过示例来简单了解Autofac的使用
心莱科技雪雁
2020/05/11
2K0
点击加载更多

相似问题

可阻UIImage

45

可阻ListeningExecutorService

13

JavaFx可阻

13

可阻TableView信元

34

可阻中心圆UIView

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文