当您将从元帅继承的对象传递到不同的appdomain时,如果创建对象的appdomain诱导的appdomain诱导的gc.collect(),前提是对象不会由time gc.collect扎根于任何一个appdomain( )叫?

当我说不是扎根时,我的意思是没有开发人员书面代码再访问它了。

看来该对象没有被收集,而是被提升到下一代!

但是,如果我停止将对象传递到diff appdomain,则将按预期收集。

这是设计行为吗?如果这样的理由?

多谢你们,

PS我知道代码中的gc.collect()由于许多原因是不好的,我只是想了解MBRO上的GC。

有帮助吗?

解决方案

正如您提到的,MBRO对象很难跟踪GC。因此,MS实施了他们的行为有些不同。
这些对象具有两个属性:它们的初期(我认为五分钟)和一个恢复时间(两分钟)。如果创建了MBRO对象,则具有最初的生命周期。一旦此时间为零,它将标记为GC。
对象上的每个调用允许对象为重新启动时间延长(如果剩余的寿命少于renewonCalltime)。

例如(最初的5分钟,2分钟,重新启动时间):
创建对象:寿命为五分钟;
4分钟通过;生命是一分钟;
呼叫对象;生命是两分钟;
2分钟通过;
对象标记为GC,没有剩余的生命;

MSDN上的某个地方有一篇很棒的文章(我现在找不到:/)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top