计算包含.NET对象的引用数

时间:2011-07-05 09:07:03

标签: .net

我尝试序列化一个.NET对象。

在某种情况下,该对象的序列化需要花费大量时间。另一方面,相同(或几乎相同)对象的相同序列化非常快......

我试着理解为什么。我试着查阅“主要”对象集合的数量,但是他们向我显示了相同的结果......

我无法手动测试所有集合计数器。我只想弄清楚在每个序列化之前,我的对象的“部分”在“大小”中发生了显着变化。

说,我有House。我是House我有People集合。我还有Rooms集合,Pets集合等。

我有很多操作,PersonGotOutPetCameIn等。我在每个操作之前序列化对象(为了能够撤消 - 重做我的操作)。

在采取行动后,说PersonChangeRoom序列化时间会急剧增加,但我看到Person的收集计数保持不变。

所以,我的问题是如何“检测”这样的“对象泄漏”,或者如何计算每次有多少引用或对象“控制”MyHouse

2 个答案:

答案 0 :(得分:0)

如果我理解你的帖子,我认为你的结论泄漏影响序列化时间可能是错误的。让我解释一下。

.net只会序列化对象图中的对象,而不是任何孤立对象。

另外,您说集合中的项目数仍为相同,因此持续时间应为线性

我唯一的结论是你的序列化代码很慢和/或消耗内存到.NET可能强制垃圾收集 GC )回收的程度记忆 - 一种非常昂贵的操作。人们无法准确预测GC何时发生。除非要求是最重要的,否则它也不赞成强制使用GC。无论您或.NET是否调用GC,它仍然会导致您的应用程序在GC运行时冻结。

答案 1 :(得分:0)

我注意到两件事:

  

我在每个动作之前序列化对象(为了能够撤消 - 重做我的动作)。

  

一个动作之后,比如PersonChangeRoom,序列化时间会急剧增加,但我看到Person的集合数量保持不变。

我想知道您是否将每个序列化的输出保留在内存中,作为House对象的属性,并且此属性是序列化的项目之一。所以每次你有任何行动,这个属性都会增长。不久就会变得非常大。