**** 编辑 *****
有一个问题 - here ,我经历过。我提问的目的是不同的(就像在那个问题中,提问者正在询问他得到的解决方案。在这里,我正在寻找更好的方法来完成任务(我知道两种解决方案,并要求更好的一个或什至更好的第三个)选项))
我有一个 Obj
数组。
我知道这两种清除(或类似)数组的方法。
int length = arrayOfObj.Length
1:
arrayOfObj = new Obj[长度]
2:
Array.Clear(arrayOfObj, 0, 长度)
他们显然都在做同样的事情。 但就内存力而言,哪一个更好。 或者我应该把内部垃圾收集的事情留下来?
最佳答案
你不用担心这个问题。正如您所建议的,垃圾收集将为您处理好它。但是,如果您在其他地方仍然引用了数组中的任何对象,那么这些对象当然不会被垃圾收集。
我还应该提到一些关于 IDisposable
的事情正如您问题下的评论所建议的。 .NET 框架的垃圾收集器将在适当的时候释放托管资源。 IDisposable
的目的接口(interface)是为了保证非托管资源得到释放,例如打开的文件和流。如果其对象位于数组中的类具有任何此类非托管资源,则该类应实现 IDisposable
你应该调用 Dispose
在清除数组之前对每个对象进行操作。
通常在处理 IDisposable
时,您可以使用using
声明以保证在使用完该对象后该对象已得到正确处置。但是,由于在本例中您正在处理一次性对象的集合,因此每个对象不太可能是在 using
内创建的。声明(在某些奢侈的情况下可能是可能的)。因此,您必须循环遍历元素并调用 Dispose
在清除数组之前对每一个进行操作**。同样,这仅适用于集合中的对象具有需要在垃圾收集每个对象之前处理的非托管资源的情况。
** 请记住:如果您有对任何这些对象的外部引用并尝试在之后再次使用它们,您将会遇到麻烦,因为它们已经被释放。
关于c# - 就内存而言,清除数组的更好方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41282777/