0

我正在开发一个背景更改应用程序。该应用程序的一部分是带有 3 个图像预览(3 个图像框)的幻灯片。上一个、当前和下一个图像。问题是每次计时器滴答时,应用程序都会占用大约 8 MB 的内存空间。我知道它最有可能是由图像绘制类引起的,但我不知道如何处理我不使用的图像。

更新:非常感谢。我需要对您提供的代码进行一些调整,但它现在可以工作了。当我在完全不同的对象上使用 dispose 方法之前尝试使用它时。谢谢你。

它按以下顺序工作。

  1. 加载多张图片
    • 检索图像路径
  2. 设置更改图像的时间间隔
  3. 启动计时器
  4. 随着每个计时器滴答声,计时器执行以下操作

    pictureBoxCurr.BackgroundImage = Image.FromFile(_filenames.ElementAt(_currNum));
    pictureBoxPrev.BackgroundImage = Image.FromFile(_filenames.ElementAt(_currNum - 1));
    pictureBoxNext.BackgroundImage = Image.FromFile(_filenames.ElementAt(_currNum + 1));
    

每次显示新预览时,内存使用量都会再占用 8MB 左右。我不知道究竟是什么占用了那个空间。

如果您知道导致问题的原因或有任何线索,请告诉我。

4

1 回答 1

1

在更改图像之前,我建议在每个计时器滴答声中调用以下代码。

pictureBoxCurr.BackgroundImage.Dispose();
pictureBoxPrev.BackgroundImage.Dispose();
pictureBoxNext.BackgroundImage.Dispose();

这将立即释放非托管图像资源,而不是等待垃圾收集器。

于 2013-01-26T17:23:22.757 回答