计算一个.NET对象包含多少引用
我尝试序列化.NET对象 在一种情况下,该对象的序列化需要很多时间。换句话说,相同或几乎相同对象的相同序列化进行得非常快 我试着去理解为什么。我试图查询主要对象集合的计数,但它们向我显示了相同的结果 我无法手动测试所有集合计数器。我只想知道在每次序列化之前,对象的哪些部分的大小会发生显著变化 喂,我有一栋房子。我有人收集我的房子。我还有房间收藏、宠物收藏等 我有很多操作,比如PersonGotOut、PetCameIn等等。我在每个操作之前序列化对象,以便能够撤消重做我的操作 在一个操作之后,比如说PersonChangeRoom,序列化时间急剧增长,但我看到此人的收集计数保持不变计算一个.NET对象包含多少引用,.net,.net,我尝试序列化.NET对象 在一种情况下,该对象的序列化需要很多时间。换句话说,相同或几乎相同对象的相同序列化进行得非常快 我试着去理解为什么。我试图查询主要对象集合的计数,但它们向我显示了相同的结果 我无法手动测试所有集合计数器。我只想知道在每次序列化之前,对象的哪些部分的大小会发生显著变化 喂,我有一栋房子。我有人收集我的房子。我还有房间收藏、宠物收藏等 我有很多操作,比如PersonGotOut、PetCameIn等等。我在每个操作之前序列化对象,以便能够撤消重做我的操作 在一个操作之后,比
因此,我的问题是如何检测此类对象泄漏,或者如何计算每次有多少引用或对象控制MyHouse?如果我正确理解了您的帖子,我认为您关于泄漏影响序列化时间的结论可能是错误的。让我解释一下 .net将仅序列化对象图中的那些对象,而不是任何孤立对象 此外,您还说集合中的项目数保持不变,因此持久性时间应该是线性的
我唯一的结论是,要么序列化代码速度慢,要么占用内存,以至于.NET可能迫使垃圾收集GC回收内存—这是一个非常昂贵的操作。人们无法准确预测GC何时发生。它也不赞成强制GC,除非要求是最重要的。无论您或.NET是否调用GC,它仍然会导致您的应用程序在GC运行时冻结。如果我正确理解您的帖子,我认为您关于泄漏影响序列化时间的结论可能是错误的。让我解释一下 .net将仅序列化对象图中的那些对象,而不是任何孤立对象 此外,您还说集合中的项目数保持不变,因此持久性时间应该是线性的 我唯一的结论是,要么序列化代码速度慢,要么占用内存,以至于.NET可能迫使垃圾收集GC回收内存—这是一个非常昂贵的操作。人们无法准确预测GC何时发生。它也不赞成强制GC,除非要求是最重要的。无论您或.NET是否调用GC,它都会导致您的应用程序在GC运行时冻结。我注意到两件事: 我在每次操作之前序列化对象,以便能够撤消或重做操作 及 在一个操作之后,比如说PersonChangeRoom,序列化时间急剧增长,但我看到此人的收集计数保持不变 我想知道您是否将每个序列化的输出保存在内存中,作为房屋对象的属性,而此属性是序列化的项之一。所以每次你有任何动作,这个属性都会增长。没过多久,它就会变得很大。我注意到两件事: 我在每次操作之前序列化对象,以便能够撤消或重做操作 及 在一个操作之后,比如说PersonChangeRoom,序列化时间急剧增长,但我看到此人的收集计数保持不变
我想知道您是否将每个序列化的输出保存在内存中,作为房屋对象的属性,而此属性是序列化的项之一。所以每次你有任何动作,这个属性都会增长。不需要很长时间,它就会变得非常大。看看这个问题:@Enriqco:没有办法不使用探查器之类的外部应用程序?您可以从代码中使用ICorProfilerCallback和ICorProfilerCallback2非托管接口。无需使用外部探查器。它们是在CorGuids.lib中定义的。请看这个问题:@Enriqco:没有办法不使用探查器之类的外部应用程序?您可以从代码中使用ICorProfilerCallback和ICorProfilerCallback2非托管接口。无需使用外部探查器。它们在CorGuids.lib中定义