【问题标题】:Change Form Backgroundimage takes too much memory更改表单背景图像占用太多内存
【发布时间】:2012-05-25 11:03:35
【问题描述】:

我在 Windows 窗体中创建了一个小游戏,并使用属性背景图像。 我创建新的位图并将其提供给表单。 问题是,程序使用了太多的内存——每次它做新的位图的过程都会增加更多的 2k! 过了一会儿,我猜垃圾收集器将它们全部删除(内存立即下降),但它可以达到 800k,这对我的小游戏来说太荒谬了。 在我将位图放到表单属性之后,我没有任何对位图的引用,即使我将位图设置为空,问题也没有解决。 我能做些什么来解决这个内存问题?谢谢!

【问题讨论】:

  • 就像一个注释,.NET 没有发现内存有任何问题,所以它不会清除它。如果你用应用程序使 Windows 过载,它就会崩溃。但是不要害怕使用“太多”内存。它会在必要时清洁它。 “过早的优化是万恶之源”
  • 打错了,下次按你说的做。

标签: c# .net winforms memory


【解决方案1】:

在设置新图像之前获取对上一个图像的引用,以便您可以处理它:

Image oldImage = this.BackgroundImage;
this.BackgroundImage = newImage;
oldImage.Dispose();

【讨论】:

  • 我真的不知道为什么,但是它对内存没有影响(函数Dispose())。
  • @liran63:如果您创建新图像,内存使用量增加是正常的。垃圾收集器只会在需要或有空闲时间使用时进行清理。 Dispose 调用本身不会释放任何内存,但它使清理更容易,因为对象不必进入最终确定的过程。
  • 是的,没错 - Dispose 就像“我已经清理了所有我需要的东西,所以不要整理我的非托管资源”。这是因为 Dispose 通常会调用 GC.SuppressFinalize(this),这意味着它不需要做任何额外的工作来整理东西。你已经为它省去了麻烦
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-13
相关资源
最近更新 更多