C# 后台转换器应用程序占用太多内存

C# 后台转换器应用程序占用太多内存,c#,image,memory,background,slideshow,C#,Image,Memory,Background,Slideshow,我正在开发一个改变背景的应用程序。该应用程序的一部分是一个幻灯片,其中包含3个图像预览(3个图像框)。上一个、当前和下一个图像。问题是,每次定时器滴答作响时,应用程序都会占用大约8MB的内存空间。我知道这很可能是由图像绘制类引起的,但我不知道如何处理我没有使用的图像 更新: 非常感谢你。我需要调整一下您提供的代码,但它现在可以工作了。当我在完全不同的对象上使用dispose方法之前尝试使用它时。 多谢各位 它按以下顺序工作 加载多个图像 检索图像路径 设置更改图像的时间间隔 启动计时器 在每

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

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

它按以下顺序工作

  • 加载多个图像
    • 检索图像路径
  • 设置更改图像的时间间隔
  • 启动计时器
  • 在每个计时器勾选时,计时器执行以下操作

    pictureBoxCurr.BackgroundImage = Image.FromFile(_filenames.ElementAt(_currNum));
    pictureBoxPrev.BackgroundImage = Image.FromFile(_filenames.ElementAt(_currNum - 1));
    pictureBoxNext.BackgroundImage = Image.FromFile(_filenames.ElementAt(_currNum + 1));
    
  • 每次显示新预览时,内存使用量都会再占用8MB左右。我不知道到底是什么占据了这个空间


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

    我建议在更改图像之前,在每个计时器计时点调用以下代码

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

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

    已尝试。我得到以下异常对象引用未设置为对象的实例。在处理之前,请检查每个图像是否为空。如果为空,则不要处理。它已工作。我只需要稍微调整一下。非常感谢你。