Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 垃圾收集.Net_C#_.net_Garbage Collection - Fatal编程技术网

C# 垃圾收集.Net

C# 垃圾收集.Net,c#,.net,garbage-collection,C#,.net,Garbage Collection,我想我已经基本了解了垃圾收集器在.Net中的工作方式,但最近有人问了我一个我不太明白的问题。据我记忆所及,这个问题是按照- 考虑到垃圾所涉及的不同世代 集合,您希望对象处于哪一代 我猜了一下,说是第0代,因为这意味着一个短暂的对象,可以释放内存。但另一方面,当我阅读一些MSDN文档时,它表明第2代对象更稳定(即长寿命),我知道GC收集这些内容的频率较低 这个问题的正确答案是什么?还是另一个“视情况而定”的答案 正确答案当然是“正确的一代”。如果一个对象是短命的,我希望它在为短命对象优化的生成中。

我想我已经基本了解了垃圾收集器在.Net中的工作方式,但最近有人问了我一个我不太明白的问题。据我记忆所及,这个问题是按照-

考虑到垃圾所涉及的不同世代
集合,您希望对象处于哪一代

我猜了一下,说是第0代,因为这意味着一个短暂的对象,可以释放内存。但另一方面,当我阅读一些MSDN文档时,它表明第2代对象更稳定(即长寿命),我知道GC收集这些内容的频率较低


这个问题的正确答案是什么?还是另一个“视情况而定”的答案

正确答案当然是“正确的一代”。如果一个对象是短命的,我希望它在为短命对象优化的生成中。如果我的对象是长寿命的,我希望它在为长寿命对象优化的生成中


如果所有对象都有一个“最佳”生成,我们会将其作为默认生成,并删除其他生成。GC创建者会很高兴地听到,世代性是他们算法复杂性的一个来源;-)

正确答案当然是“正确的一代”。如果一个对象是短命的,我希望它在为短命对象优化的生成中。如果我的对象是长寿命的,我希望它在为长寿命对象优化的生成中



如果所有对象都有一个“最佳”生成,我们会将其作为默认生成,并删除其他生成。GC创建者会很高兴地听到,世代性是他们算法复杂性的一个来源;-)

这是一个有点奇怪的问题。我还要回答第0代,因为第0代集合是迄今为止最便宜的,因此GC的开销最小。我认为这个问题的目的是,如果短寿命的物体不能进入更高的世代,那就好了。不管怎样,长寿的人都能活到最后一代。

这是一个有点奇怪的问题。我还要回答第0代,因为第0代集合是迄今为止最便宜的,因此GC的开销最小。我认为这个问题的目的是,如果短寿命的物体不能进入更高的世代,那就好了。长寿命的对象无论如何都会延续到最后一代。

“您希望对象处于哪一代?”。事实上,我甚至无法想象有什么理由我会关心我的对象是哪一代……我想(一般来说)如果这个问题对你来说很重要,你就错了。我会说——不是世代本身重要,而是它们的使用比例。如果我要追踪GC的使用情况,我首先要看看这些比例是什么样子的。这是一个采访问题、一本书/课堂上的练习,还是一个反问?只有最后一个才有意义;另外两个容易引起面部手掌。@Adriano我同意,这是什么样的投掷我!我从来没有真正想过,“你希望你的对象处于哪一代?”。事实上,我甚至无法想象有什么理由我会关心我的对象是哪一代……我想(一般来说)如果这个问题对你来说很重要,你就错了。我会说——不是世代本身重要,而是它们的使用比例。如果我要追踪GC的使用情况,我首先要看看这些比例是什么样子的。这是一个采访问题、一本书/课堂上的练习,还是一个反问?只有最后一个才有意义;另外两个容易引起面部手掌。@Adriano我同意,这是什么样的投掷我!我从来没有想过。它们是最便宜的,因为大多数东西都不在里面。如果您将所有对象都强制放在其中,您将失去所有好处,并在这一过程中获得一些新的缺点。@delnan,我认为问题不在于“强制”任何东西,而在于根据GC中的当前算法观察哪个对象在何处。也许“强制”是一个错误的术语。我的意思是,您不希望所有对象都在gen0中:您只希望在gen0中使用寿命很短的对象,并且每个寿命更长的对象都应该离开托儿所。@Grzenio:即便如此,如果您对第0代有偏好并“优化”了您的分配,使您的大多数对象都是寿命短且较小的,最终的结果是这一代中有更多的对象。但是gen-0集合实际上会变慢,这与最初存在代的原因相同。它们是最便宜的,因为大多数对象都不在其中。如果您将所有对象都强制放在其中,您将失去所有好处,并在这一过程中获得一些新的缺点。@delnan,我认为问题不在于“强制”任何东西,而在于根据GC中的当前算法观察哪个对象在何处。也许“强制”是一个错误的术语。我的意思是,您不希望所有对象都在gen0中:您只希望在gen0中使用寿命很短的对象,并且每个寿命更长的对象都应该离开托儿所。@Grzenio:即便如此,如果您对第0代有偏好并“优化”了您的分配,使您的大多数对象都是寿命短且较小的,最终的结果是这一代中有更多的对象。但是gen-0集合实际上会变慢,因为同样的原因,最初会有几代。我认为长寿命的对象根本不重要,它们在两个集合之后会被推到第二代。我认为这个问题的目的是,如果短寿命对象不能进入更高的世代,那就好了。公平地说,GC创建者自己也增加了这种复杂性。:)GC不必是分代的,也不是这样开始的。@cHao到目前为止的证据表明它们必须是分代的。。。如果他们想