c# - 就内存而言,清除数组的更好方法是什么

标签 c# arrays memory-management

**** 编辑 *****

有一个问题 - 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/

相关文章:

c# - 如何确定 Razor View 中的模型是否为空

c# - MSBuild 任务不会导致编译生成的 c# 文件

c# - WPF 绑定(bind) : cannot resolve symbol due to unknown datacontext

arrays - 如何将命令输出存储到 Ansible 中的数组中?

C 判断 "un-flattened"第i个元素在n维数组中的 "flattened"位置

c - 下面的内存分配有什么不同吗?

ios - 有点想知道ios上的内存管理

iphone - 有没有办法查看 iOS 应用程序自启动以来的最大内存使用量?

c# - 添加数据后如何滚动到 ListView 的末尾 - WPF

php - array 上的 strlen 在 php 中返回 5