我尝试序列化一个.NET对象。
在某种情况下,该对象的序列化需要花费大量时间。另一方面,相同(或几乎相同)对象的相同序列化非常快......
我试着理解为什么。我试着查阅“主要”对象集合的数量,但是他们向我显示了相同的结果......
我无法手动测试所有集合计数器。我只想弄清楚在每个序列化之前,我的对象的“部分”在“大小”中发生了显着变化。
说,我有House
。我是House
我有People
集合。我还有Rooms
集合,Pets
集合等。
我有很多操作,PersonGotOut
,PetCameIn
等。我在每个操作之前序列化对象(为了能够撤消 - 重做我的操作)。
在采取行动后,说PersonChangeRoom
序列化时间会急剧增加,但我看到Person
的收集计数保持不变。
所以,我的问题是如何“检测”这样的“对象泄漏”,或者如何计算每次有多少引用或对象“控制”MyHouse
?
答案 0 :(得分:0)
如果我理解你的帖子,我认为你的结论泄漏影响序列化时间可能是错误的。让我解释一下。
.net只会序列化对象图中的对象,而不是任何孤立对象。
另外,您说集合中的项目数仍为相同,因此持续时间应为线性。
我唯一的结论是你的序列化代码很慢和/或消耗内存到.NET可能强制垃圾收集( GC )回收的程度记忆 - 一种非常昂贵的操作。人们无法准确预测GC何时发生。除非要求是最重要的,否则它也不赞成强制使用GC。无论您或.NET是否调用GC,它仍然会导致您的应用程序在GC运行时冻结。
答案 1 :(得分:0)
我注意到两件事:
我在每个动作之前序列化对象(为了能够撤消 - 重做我的动作)。
和
一个动作之后,比如PersonChangeRoom,序列化时间会急剧增加,但我看到Person的集合数量保持不变。
我想知道您是否将每个序列化的输出保留在内存中,作为House对象的属性,并且此属性是序列化的项目之一。所以每次你有任何行动,这个属性都会增长。不久就会变得非常大。