创建位图时可能的内存泄漏

Elf*_*foc 0 c# winforms

计时器的每个滴答我想检查收到的数据:"000000000"如果这些位中的任何一个被设置为1然后更改图片框.这部分代码正在运行 - 但我认为我有内存泄漏问题(程序使用的内存正在急剧增加).如何解决这个问题?

 private void RefreshingTimerTick(object sender, EventArgs e)
 {
    for (int i = 1; i < 9; i++)
    {
       if (ReceivedDataTextBox.Text[i - 1].ToString() == "1")
          ((PictureBox)this.tabPage1.Controls["pictureBox_DO" + i.ToString()]).Image = new Bitmap(@"Logos\\green.png");
       else ((PictureBox)this.tabPage1.Controls["pictureBox_DO" + i.ToString()]).Image = new Bitmap(@"Logos\\red.png");
    }
 }
Run Code Online (Sandbox Code Playgroud)

SwD*_*n81 8

this.tabPage1.Controls["pictureBox_DO" + i.ToString()]).Image在将图像分配给新图像之前,需要先处理旧图像()

private Bitmap _greenBitmap = new Bitmap(@"Logos\green.png"); 
private Bitmap _redBitmap = new Bitmap(@"Logos\red.png");

private void RefreshingTimerTick(object sender, EventArgs e)
{
   for (int i = 1; i < 9; i++)
   {
       PictureBox p = 
          (PictureBox)this.tabPage1.Controls["pictureBox_DO" + i.ToString()];
       if(p != null && p.Image != null)
       {  
          p.Image.Dispose();
       }

       bool is_one = (ReceivedDataTextBox.Text[i - 1].ToString() == "1");
       if(p != null)
       {
          p.Image = (is_one) ? _greenBitmap : _redBitmap;
       }
    }
 }
Run Code Online (Sandbox Code Playgroud)