使用C#后清除数组

问题描述 投票:0回答:4

我在C#中这样声明了一个数组。

  public ushort[][] pixels16;

然后我在数组中填充了500张图片的像素数据,数组中的每个元素包含262144个项目。问题是它变得太大了,所以在我使用它之后,我需要把它处理掉以释放内存。我怎样才能做到这一点?

c# arrays
4个回答
3
投票

你可以这样做。

pixels16 = null;
GC.Collect() // to free memory

7
投票

你写道:"我在C#中声明了一个数组。

我在C#中用这种方式声明了一个数组。 public ushort[][] pixels16;

明确一下:你没有声明一个数组,你声明了一个引用,叫做 pixels16.

该引用可以是任何2-D数组。ushorts但它最初是指 毫无 (null)。

你这样做的时候实际上是在创建数组。

pixels16 = new ushort[500, 500];

同样,当你不再引用这个数组时,你也可以让它符合垃圾回收的条件。

pixels16 = null;  // Now the array is ready for Garbage Collection.

垃圾收集器是 得心应手不建议你手动调用垃圾收集。 它很有可能,会非常快速有效地收集垃圾,让你的程序运行没有问题。


1
投票

我认为你可以使用。

pixels16 = null;

并使用 System.GC.Collect() 为力 GC 要运行,但这是 不建议.

可以通过调用Collect来强制收集垃圾,但大多数情况下,应该避免这样做,因为这可能会产生性能问题。


0
投票

正如Akrem所暗示的那样,删除所有现有的对对象的引用(pixel=null)即可。然后GC.Collect();会强制唤醒垃圾回收器来完成它的工作。

除非你担心内存,否则你可以忽略它,当包含变量的代码块(例如函数)结束的那一刻,GC将在下一次传递中清理所有的东西,但是你必须记住,只要有一个对对象的引用存在,那么GC就不会碰它。只要记住GC的工作方式是神秘的,所以对象可能会稍后被删除。

然而问题来了,为什么你要一次在内存中存储500张图片呢?你可能想寻求一种方法,把它放到一个循环中,一次加载单个图片,多次重复使用同一个缓冲区。

© www.soinside.com 2019 - 2024. All rights reserved.