gpt4 book ai didi

.net - 什么时候应该在.NET中放置对象?

转载 作者:行者123 更新时间:2023-12-03 13:17:53 25 4
gpt4 key购买 nike

对于通用代码,我真的需要处置一个对象吗?我能否在很大程度上忽略掉它,或者当您100%确定不再需要该对象时始终处置它是一个好主意吗?

最佳答案

完成处理后立即处置该对象。一次性对象表示拥有CLR本质上不了解的宝贵资源的对象。因此,GC也不知道资源,也无法做出明智的决定,决定何时收集一次性物品,从而释放基础资源。

最终,GC会感到内存压力并通过巧合收集您的对象(仅此而已)。如果您不以确定性的方式处理对象,则完全有可能进入几乎没有内存压力的资源匮乏状态。

这是如何发生的快速示例。让我们将基础资源视为Win32句柄。这些是非常有限的并且非常小。您运行的操作将创建许多Foo对象。 Foo对象实现IDisposable,并负责创建和处理Win32句柄。它们不是手动释放的,并且有一个古怪的区别,使其进入了Gen2堆。该堆很少被释放。随着时间的流逝,足够的Foo实例将其放入Gen2堆中,以占用所有可用的句柄。因此,无论使用了多少内存,都无法创建新的Foo对象。

实际上,要释放这些句柄,在一次操作期间要分配相当大的内存才能给予足够的压力来释放实例。

关于.net - 什么时候应该在.NET中放置对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/245856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com