gpt4 book ai didi

c# - 在内存方面清除数组的更好方法是什么

转载 作者:行者123 更新时间:2023-11-30 20:32:32 24 4
gpt4 key购买 nike

**** 编辑 *****

有一个问题- here ,我经历过。我问的目的是不同的(因为在那个问题中,提问者正在寻求他得到的解决方案。在这里我正在寻找更好的方法来完成任务(我知道两个解决方案并要求更好的一个甚至更好的第三个选项))


我有一个 Obj 数组。我知道这两种方法正在清除(或做类似的)数组。

int length = arrayOfObj.Length

1:arrayOfObj = new Obj[length]

2:Array.Clear(arrayOfObj, 0, length)

他们显然都在做同样的事情。但是就内存而言,其中哪一个更好。或者我应该离开 Internal Garbage collection 这件事?

最佳答案

您不必担心。正如您所建议的,垃圾收集会为您处理。但是,如果您在其他地方仍然引用数组中的任何对象,那么这些对象当然不会被垃圾回收。

我还应该提一下关于 IDisposable 的事情正如您问题下的评论所建议的那样。 .NET Framework 的垃圾收集器将在适当的时候释放托管 资源。 IDisposable的目的接口(interface)是为了保证释放非托管资源,例如打开的文件和流。如果其对象在您的数组中的类具有任何此类非托管资源,则该类应实现 IDisposable你应该调用Dispose在清除数组之前在每个对象上。

通常在处理 IDisposable 时, 你会利用 using声明以保证在您使用完对象后已正确处置该对象。但是,由于在这种情况下您处理的是一次性对象的集合,所以不太可能每个对象都是在 using 中创建的。声明(在某些奢侈的情况下可能是可能的)。因此,您必须遍历元素并调用 Dispose在清除阵列**之前在每个上。同样,只有当您的集合中的对象具有需要在每个对象被垃圾收集之前处理的非托管资源时,才会出现这种情况。

** 请记住:如果您有任何这些对象的外部引用并在之后尝试再次使用它们,您将会遇到麻烦,因为它们已经被释放了。

关于c# - 在内存方面清除数组的更好方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41282777/

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