2017-05-18 5 views
-1

複数(私の場合は77)のイメージを選択し、他のサイズとフォーマットに変換したいと考えています。 私は、フォルダからの画像の名前のリストを含むIlist(文字列)listaslikaを作成しました。 tbSelectは、イメージの元のフォルダパスを含むテキストボックスであり、tbSaveにはイメージが保存されるフォルダが含まれます。 私はすべてを処分しても、私はメモリリークや何か提案があっても、それらのすべてのサイズを変更したいですか?前もって感謝します。ビットマップを使用した並列foreachメモリリーク

private void button3_Click(object sender, EventArgs e) 
    { 
     int W = Convert.ToInt32(txtW.Text); 
     int H = Convert.ToInt32(txtH.Text); 
     Parallel.ForEach(listaslika, slika => 
     { 
      Bitmap bpm = new Bitmap(W, H); 
      Graphics graphic = Graphics.FromImage(bpm); 
      img = Image.FromFile(tbSelect.Text + "\\" + slika); 
      graphic.DrawImage(img, 0, 0, W, H); 
      graphic.Dispose(); 
      img = bpm; 
      ((Button)sender).Enabled = false; 
      string select = Path.GetFileNameWithoutExtension(slika); 
      img.Save(tbSave.Text + "\\" + select + exten[GetSelecetedIndex()]); 
      bpm.Dispose(); 
      img.Dispose(); 
     }); 
+1

あなたがImage.FromFile –

答えて

0

私はそれがより多くのようなものを見て期待:

private void button3_Click(object sender, EventArgs e) 
{ 
    int W = Convert.ToInt32(txtW.Text); 
    int H = Convert.ToInt32(txtH.Text); 
    Parallel.ForEach(listaslika, slika => 
    { 
     using (Bitmap bmp = new Bitmap(W, H)) 
     { 
      using (Graphics graphic = Graphics.FromImage(bmp)) 
      { 
       using (FileStream fs = new FileStream(tbSelect.Text + "\\" + slika, System.IO.FileMode.Open)) 
       { 
        using (Image img = Image.FromStream(fs)) 
        { 
         graphic.DrawImage(img, 0, 0, W, H); 
        } 
       } 
      } 

      string select = Path.GetFileNameWithoutExtension(slika); 
      bmp.Save(tbSave.Text + "\\" + select + exten[GetSelecetedIndex()]); 
     }    
    }); 
} 
+0

で作成した画像のインスタンスを配置していないあなたは、必要に応じて第二と第三使用してブロックの中括弧を削除することができますより良い読書のため –

+0

あなたの答えをありがとう! しかし、ceratin時間のメモリ使用量がゼロになった後。通常のforeachとparallel.forachの両方をmaxdegreeofparallelism = 1で使用しているときは、OKです。どのようなアイデアを私はparallel.foreachをうまく行くために行う必要がありますか? @SirRufo –

+0

メモリの使用だけでなく、イメージインスタンスが廃棄されるか、またはガベージコレクトされるまでファイルがロックされます。 –

関連する問題