【问题标题】:Clearing previously loaded images in WinForm from resources从资源中清除以前在 WinForm 中加载的图像
【发布时间】:2018-05-18 03:08:43
【问题描述】:

我的 WinForm 应用程序的目的是加载和显示一小段时间从特定文件夹中随机选择的图片。我正在使用这样的 PictureBox 执行此操作(此行由随机数生成器调整以生成不同的数字文件名):

 pictureBox1.Image = Image.FromFile(@"C:\pics\1.png");

一段时间后,它会加载不同的图像文件,但查看诊断视图,我看到进程内存正在上升大约。每张图片加载 1MB。大约 100 张图片后,大小增加了 100MB,即使图片已被替换。控制显示持续时间的计时器之一包括我在此处找到的一些方法,用于尝试从资源中刷新图像:

private void displayDuration(object sender, EventArgs e)
 {
  pictureBox1.Visible = false;
  pictureBox1.Image = null;
  pictureBox1.Invalidate();
  timer2.Enabled = false;
 }

但无济于事。内存不断增加,但 Tick 函数可以正常工作,因为将可见性设置为 false 就可以了。

当我不再需要这张图片时,如何正确地从内存中刷新它?

我正在尝试不包含 ImageList,但如果您认为它可以解决此内存问题,我可以添加它。

【问题讨论】:

  • 你需要处理图片。
  • 哦,我忘了提,我确实尝试了 pictureBox1.Dispose() 或类似的东西,但它只是破坏了图片框以备将来使用,即使没有显示图片,内存使用量也会不断增加,所以它几乎产生了相反的效果。但如果你确定就是这样,我会试着再玩弄一些。

标签: winforms memory resources picturebox dispose


【解决方案1】:

先生。 Reza Aghaei 是正确的,Dispose() 成功了,我只是用错了:

pictureBox1.Dispose();

这只是破坏了图片框。将图片放置在pictureBox中才是正确的方式:

pictureBox1.Image.Dispose();

我不应该这么早就放弃这种方法。非常感谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 2013-02-17
    • 2011-08-13
    • 2020-02-11
    相关资源
    最近更新 更多