Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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
计算一个.NET对象包含多少引用_.net - Fatal编程技术网

计算一个.NET对象包含多少引用

计算一个.NET对象包含多少引用,.net,.net,我尝试序列化.NET对象 在一种情况下,该对象的序列化需要很多时间。换句话说,相同或几乎相同对象的相同序列化进行得非常快 我试着去理解为什么。我试图查询主要对象集合的计数,但它们向我显示了相同的结果 我无法手动测试所有集合计数器。我只想知道在每次序列化之前,对象的哪些部分的大小会发生显著变化 喂,我有一栋房子。我有人收集我的房子。我还有房间收藏、宠物收藏等 我有很多操作,比如PersonGotOut、PetCameIn等等。我在每个操作之前序列化对象,以便能够撤消重做我的操作 在一个操作之后,比

我尝试序列化.NET对象

在一种情况下,该对象的序列化需要很多时间。换句话说,相同或几乎相同对象的相同序列化进行得非常快

我试着去理解为什么。我试图查询主要对象集合的计数,但它们向我显示了相同的结果

我无法手动测试所有集合计数器。我只想知道在每次序列化之前,对象的哪些部分的大小会发生显著变化

喂,我有一栋房子。我有人收集我的房子。我还有房间收藏、宠物收藏等

我有很多操作,比如PersonGotOut、PetCameIn等等。我在每个操作之前序列化对象,以便能够撤消重做我的操作

在一个操作之后,比如说PersonChangeRoom,序列化时间急剧增长,但我看到此人的收集计数保持不变


因此,我的问题是如何检测此类对象泄漏,或者如何计算每次有多少引用或对象控制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中定义