当前位置:  开发笔记 > 编程语言 > 正文

如何在c#中删除数组?

如何解决《如何在c#中删除数组?》经验,为你挑选了4个好方法。

如果这是一个显而易见的问题,我很抱歉,但谷歌或搜索都没有让我得到答案.

有没有办法完全删除数组?

我想相反int[] array = new int[5]



1> RossFabrican..:

说你打电话:

 void Foo(){
     int[] a = new int[5];
 }

在C#中,没有办法取消定义变量a.这意味着即使您设置为null a也将定义.但是,最终将超出范围.这意味着没有代码可以引用它,垃圾收集器将在下次运行时为您释放内存,这可能不会持续很长时间.FooaFoo a


一定要喜欢明确的答案:)感谢一大堆让我从谷歌搜索更长时间.

2> Marc Gravell..:

你只需要让它超出范围,等待GC找到它; 这可能不会立即(事实上,它几乎肯定不会).如果在一个长期存在的对象上有一个字段(它将保留在范围内),那么您可以设置为null,这可以提供帮助.

您可以影响GC收集越早(不只是你的对象:一切符合条件的),但你应该很少,如果以往任何时候都做到这一点.我只在测试台上使用它; 但:

GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced); // DON'T DO THIS!!!

更多信息GC.Collect:

使用GC.Collect()有什么不对?

何时可以调用GC.Collect?



3> ShuggyCoUk..:

没有必要删除数组,GC会处理它.

(非常)简单地说:

当内存不足时,垃圾收集器将启动,停止代码并遍历内存中的所有活动对象.
live表示堆栈上的一些引用,寄存器,静态引用和其他一些统称为"GC Roots"的东西.当它遍历它们时,它注意到它们还活着.

如果你的阵列不再存在,那么任何东西都无法再访问它(这就是决定活力的因素),因此它占用的内存将可以重用.

可能是参考分配到空是否会持有引用比期望活得更长的一个原因,或者是抱着一大块,你需要立即内存,但是这很容易适得其反,实际上使该数组长寿.如果包含实例的寿命比它包含的数组长得多,那么实例而不是堆栈变量是这种优化的更好选择.

要明确的是,作为一个初学者,你不应该考虑这种事情,让GC做它的工作,只有在你做到时才尝试帮助它:

    知道你需要

    知道怎么

    知道怎么检查你做对了



4> Greg Beech..:

你应该阅读Chris Brumme关于这个主题的文章 ; 前几段应该解释一下情况.

任何人建议"将null赋给变量"都应特别注意以下部分:

即使您在使用它之后添加"aC = null;",JIT也可以自由地将此分配视为死代码并将其消除.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有