繁体   English   中英

有什么更好的方法清除与内存有关的数组

[英]What will be better way to clear Array in concern of Memory

****编辑*****

有一个问题- 在这里 ,我经历了。 我提出问题的目的有所不同(例如,在这个问题中,问问者正在寻求他得到的解决方案。在这里,我正在寻找一种更好的方法来完成任务(我知道两种解决方案,并要求更好的一种或什至更好的第三种解决方案选项))


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

int length = arrayOfObj.Length

1: arrayOfObj = new Obj[length]

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

他们俩显然都在做同一件事。 但是就内存而言,哪一种更好。 还是我应该把这件事留给内部垃圾收集?

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

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

通常,在处理IDisposable ,您将使用using语句来保证对象在using IDisposable得到正确处理。 但是,由于在这种情况下您要处理一次性对象的集合 ,因此不太可能在using语句内创建每个对象(在某些奢侈的情况下可能会发生)。 因此,您必须遍历所有元素并在清除数组之前对每个元素调用Dispose **。 同样,仅当集合中的对象具有非托管资源时才需要对这些资源进行管理,然后才对每个对象进行垃圾回收。

**请记住:如果您对这些对象中的任何一个都有外部引用,并且由于这些对象已经被废弃而尝试再次使用它们,将会遇到麻烦。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM