首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >垃圾收集和作用域在C#中是如何工作的?

垃圾收集和作用域在C#中是如何工作的?
EN

Stack Overflow用户
提问于 2011-03-24 17:13:43
回答 4查看 17.1K关注 0票数 18

我正在学习C# coming from python,并希望知道C#垃圾收集器是如何工作的--我发现,一旦我弄清楚python在幕后做了什么,我就对python有了更多的了解,并希望避免犯下我在学习python时一开始犯的那种菜鸟错误。

我找不到任何很好的清晰的解释来解释什么时候一个项目被垃圾回收,并且留下了一些问题,比如

  1. “当一个对象的最后一个引用超出作用域时,会发生什么?”该对象是否会被垃圾回收,或者当您将其传递回定义它的作用域时,它是否仍然在那里?
  2. “引用的数量在什么时候会减少?”这让我想知道它是否使用了引用计数或其他技术--

对这些问题的回答,或者更好的是,对实际发生的事情进行清晰的概述将赢得cookies (或赞成票),如果您的答案将其与python的做事方式进行比较,则会更好。我对哪个更好不感兴趣,只对细节感兴趣。另外,我在programmers.stackexchange上的原始帖子的答案也将非常感谢…

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-24 17:17:08

dotnet GC引擎是一个标记和清除引擎,而不是您在python中习惯使用的引用计数器引擎。系统不维护对变量的引用计数,而是在需要回收RAM时运行一个“集合”,标记所有当前可达的指针,并删除所有不可达的指针(因此超出作用域)。

你可以在这里找到更多关于它是如何工作的:

http://msdn.microsoft.com/en-us/library/ee787088.aspx

系统通过从特定的“根”位置开始查找“可达”对象,如全局对象和堆栈上的对象,并跟踪这些对象引用的所有对象,以及这些引用的所有对象,等等,直到它构建了一个完整的树。这比听起来更快。

票数 25
EN

Stack Overflow用户

发布于 2011-03-24 17:16:31

在对象的最后一个引用消失后的某个不确定的时间点,该对象将被收集。

你第一个问题的第二部分没有意义。

如果你能回到定义一个对象的作用域(例如,一个lambda表达式),显然还有一个引用。

GC根本不使用引用计数。

相反,它使用mark-and-sweep algorithm

票数 6
EN

Stack Overflow用户

发布于 2011-03-24 17:22:03

垃圾收集不会由超出范围的引用触发。垃圾收集通常在为新对象分配存储空间时触发-特别是当第零代的预算耗尽时。即,在对象适合垃圾收集的时间和它们被实际收集的时间之间可能存在显着的延迟。正如其他人已经指出的,CLR不使用引用计数。相反,它采用了一种标记和清除方法。

关于垃圾收集如何工作的所有细节的一个很好的信息来源是Jeffrey Ricther的书CLR via C#。这本书详细介绍了堆是如何分区的,以及垃圾收集是如何工作的。如果您对.NET实现细节感兴趣,强烈建议您使用它。

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

https://stackoverflow.com/questions/5422918

复制
相关文章
react中setState是同步还是异步的
我们都知道,React框架是由数据来驱动视图变化的,基于状态的管理实现对组件的管理,也就是组件当中的state,通过setState方法来修改当前组件的state,以达到视图的变化。
OECOM
2020/07/01
1.3K0
React中的setState为什么是异步的?
不知道大家有没有过这个疑问,React 中 setState() 为什么是异步的?我一度认为 setState() 是同步的,知道它是异步的之后很是困惑,甚至期待 React 能出一个 setStateSync() 之类的 API。同样有此疑问的还有 MobX 的作者 Michel Weststrate,他认为经常听到的答案都很容易反驳,并认为这可能是一个历史包袱,所以开了一个 issue 询问真正的原因。最终这个 issue 得到了 React 核心成员 Dan Abramov 的回复,Dan 的回复表明这不是一个历史包袱,而是一个经过深思熟虑的设计。
beifeng1996
2022/12/19
1.5K0
React 的 setState 是同步还是异步?
如果是异步的,那应该打印的时候 count 还没修改,依然是 0,所以打印两次 0。
神说要有光zxg
2022/11/11
2.6K0
React 的 setState 是同步还是异步?
为什么vuex的Mutations是同步,而Actions是异步
vuex[1]的mutations与actions有什么区别,除了用法上mutation是同步,actions是异步,这里的同步与异步指的是commitordispatch?并不是,同步指mutati
Maic
2022/12/21
2.2K0
为什么vuex的Mutations是同步,而Actions是异步
setState 到底是同步的,还是异步的
这是一道变体繁多的面试题,在 BAT 等一线大厂的面试中考察频率非常高。首先题目会给出一个这样的 App 组件,在它的内部会有如下代码所示的几个不同的 setState 操作:
zz_jesse
2021/07/12
7040
setState 到底是同步的,还是异步的
setState 到底是同步的,还是异步的
这是一道变体繁多的面试题,在 BAT 等一线大厂的面试中考察频率非常高。首先题目会给出一个这样的 App 组件,在它的内部会有如下代码所示的几个不同的 setState 操作:
coder_koala
2021/07/08
7800
setState 到底是同步的,还是异步的
react的setState到底是同步还是异步
state = { number:1 }; componentDidMount(){ this.setState({number:3}) console.log(this.state.number) }
马克社区
2022/04/28
4380
面试官:react中的setState是同步的还是异步的
hello,这里是潇晨,大家在面试的过程是不是经常会遇到这样的问题,react的setState是同步的还是异步的,这个问题回答的时候一定要完整,来看下面这几个例子:
全栈潇晨
2021/12/15
9530
面试官:react中的setState是同步的还是异步的
hello,这里是潇晨,大家在面试的过程是不是经常会遇到这样的问题,react的setState是同步的还是异步的,这个问题回答的时候一定要完整,来看下面这几个例子:
长腿程序员165858
2022/12/16
6320
问:React的setState为什么是异步的?
不知道大家有没有过这个疑问,React 中 setState() 为什么是异步的?我一度认为 setState() 是同步的,知道它是异步的之后很是困惑,甚至期待 React 能出一个 setStateSync() 之类的 API。同样有此疑问的还有 MobX 的作者 Michel Weststrate,他认为经常听到的答案都很容易反驳,并认为这可能是一个历史包袱,所以开了一个 issue 询问真正的原因。最终这个 issue 得到了 React 核心成员 Dan Abramov 的回复,Dan 的回复表明这不是一个历史包袱,而是一个经过深思熟虑的设计。
beifeng1996
2022/10/01
9690
React中的setState的同步异步与合并
这篇文章主要是因为自己在学习React中setState的时候,产生了一些疑惑,所以进行了一定量的收集资料和学习,并在此记录下来
Qwe7
2022/06/09
9880
React中的setState的同步异步与合并
原理可以用这张图来描述,即在react中,setState通过一个队列机制实现state的更新。当执行setState时,会把需要更新的state合并后放入状态队列,而不会立刻更新this.state,当进入组件可更新状态时,这个队列机制就会高效的批量的更新state。
Qwe7
2022/06/09
1.6K0
[深度思考]·为什么CNN是同步(并行)而RNN是异步(串行)的呢?
个人主页--> https://xiaosongshine.github.io/
小宋是呢
2019/06/27
1.3K0
React 的 setState 同步还是异步
大家好,我是前端西瓜哥。今天来聊聊 React 的 setState 是同步还是异步的。
前端西瓜哥
2022/12/21
7350
setState同步异步场景
React通过this.state来访问state,通过this.setState()方法来更新state,当this.setState()方法被调用的时候,React会重新调用render方法来重新渲染UI。相比较于在使用Hooks完成组件下所需要的心智负担,setState就是在使用class完成组件下所需要的心智负担,当然所谓的心智负担也许叫做所必须的基础知识更加合适一些。
WindRunnerMax
2022/05/06
2.5K0
React中的setState是异步的吗?
在React中更新状态,一般的写法都是this.setState({a:1}),而非Vue那样this.a = 1。并且,如果在如下场景:
娜姐
2020/09/22
2.2K0
React中的setState是异步的吗?
React中的setState的同步异步与合并(2)
this.setState会通过引发一次组件的更新过程来引发重新绘制。也就是说setState的调用会引起React的更新生命周期的四个函数的依次调用:
Qwe7
2022/06/09
6800
React setState 是异步执行还是同步执行?
把 setState 放在定时器里就会同步更新。放在自定义事件函数里也会同步更新,例如:
多云转晴
2020/08/04
2.6K0
React setState 是异步执行还是同步执行?
第十一篇:setState 到底是同步的,还是异步的?
setState 对于许多的 React 开发者来说,像是一个“最熟悉的陌生人”:
越陌度阡
2021/11/02
1K0
React的useState和setState到底是同步还是异步呢?
这里跟useState不同,同步执行时useState也会对state进行逐个处理,而setState则只会处理最后一次
beifeng1996
2022/12/20
1.1K0

相似问题

Reactjs setState异步

30

如何使setState在Reactjs中同步运行?

48

异步回调的ReactJS setState

13

在Reactjs中是否有setState()的同步替代方案

136

reactjs --解决setState异步问题

327
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档