2016-06-22 12 views
1

私が作成したプログラムでこのようなコードを使用しましたが、RAMメモリのわずかな問題がありますが、これは増え続けており、RAMのすべてを貪欲にしています。だから、イメージが変わる度にメモリが増えます。私がしたいことは、前のイメージを処分することです。または、ボトルをボトルしないタイマーでスライドショーを作成するより良い方法があれば、メモリは正しい方向に私を向けるだけです。ありがとう。ImageSliderメモリリークc#

private string [] folderFile = null; 
private int selected = 0; 
private int begin = 0; 
private int end = 0; 


private void showImage(string path) 
{ 
    Image imgtemp = Image.FromFile(path); 
    pictureBox1.Image = imgtemp; 
} 

private void nextImage() 
{ 
    if(selected == folderFile.Length - 1) 
{ 
    selected = 0; 
    showImage(folderFile[selected]); 
} 
else 
{ 
selected = selected + 1; 
showImage(folderFile[selected]); 
} 
} 

private void timer1_Tick(object sender, System.EventArgs e) 
{ 
    nextImage(); 
} 

答えて

3

前の画像を処分する必要があります。

private void showImage(string path) 
{ 
    Image oldImage = pictureBox1.Image; 
    Image imgtemp = Image.FromFile(path); 
    pictureBox1.Image = imgtemp; 
    if(oldImage != null) 
     oldImage.Dispose(); 
} 
+0

くそ、それに私を打つ... – Aron

1

あなたはpictureBox1.Imageの前の値にImage.Disposeを呼び出していません。

以下の変更を行います。

private void showImage(string path) 
{ 
    Image imgtemp = Image.FromFile(path); 
    Image oldImage = pictureBox1.Image; 
    pictureBox1.Image = imgtemp; 
    if (oldImage != null) oldImage.Dispose(); 
} 

Imageは、アンマネージドオブジェクトであり、GDIクラスのラッパーです。