【问题标题】:static object references needed to be collected in c#需要在 c# 中收集静态对象引用
【发布时间】:2013-12-15 16:52:47
【问题描述】:

我的代码基本是这样的:

在此方法中每 100 毫秒从网络摄像头收集帧。

MutexControl.Image.WaitOne();
image = null; 
image = (Bitmap)eventArgs.Frame.Clone();

Bitmap Myimage = new Bitmap(Form1.image);
MutexControl.Image.ReleaseMutex();

图像是我的静态参考。我在程序的其他部分使用它。这是否会使内存管理出现任何问题。 Garbage Collector 会收集我的垃圾图像吗?

【问题讨论】:

  • 在将其设置为其他值之前,您无需将其设置为 null。
  • @John 旧的图像对象会发生什么?垃圾收集器会处理它吗?
  • 是的,它会处理得很好。十多年来。变量无关紧要 - 只有对象才重要。
  • 它最终会收集它们。通常不够快,无法阻止程序的内存使用量过大。处理位图是一项非常艰巨的要求。

标签: c# memory-management garbage-collection static-members object-lifetime


【解决方案1】:

System.Drawing.Bitmap 类实现了IDisposable,所以是的,您应该在重新分配静态字段之前处理它。如果你不处理它,你可能会对终结器线程施加过大的压力,你会看到内存使用量增加。

【讨论】:

  • 是的,内存使用量随着时间的推移而增加。但突然间,它跌落到它的起点。当我使用图像对象进行处理时,有时我会看到 SystemDrawing.dll 异常。你可以在这里看到:blog.lavablast.com/post/2007/11/… 我的也是类似的问题。当我使用我的图像而不处理系统抛出的任何异常时。在链接 RKV 中回答它。
  • 是的,这是意料之中的——它会不断增长,直到 GC 到达所有未处理的位图实例。如果你处理它们,GC 将能够更快地回收内存。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
相关资源
最近更新 更多