2016-12-16 2 views
-3

그래서 나는이 프로그램을 만들었다. 일부 코드가 있습니다그 밖의 무엇을 나는 새로운 비트 맵 (너무 많은 RAM을 가지고 간다)을 사용할 수있다.

버튼을 사용하여 사진을 변경할 때마다 램 사용량이 증가합니다.

new Bitmap(openDialog.Filename); 

이에 대한 해결책은 무엇입니까 : 내 친구는 내가 새로운 메모리 공간 내가이 일을하고있어 모든 시간을 지정이기 때문에 그 일어난 얘기? 는 (내가 구글에서 검색을 시도하지만 난 정말 무엇을 검색 몰랐어요 ..)

편집 : 도움을

지금

의 작업 덕분에. 다른 사람에 대한 편집 코드 :

 private void button1_Click(object sender, EventArgs e) 
{ 
    OpenFileDialog openDialog = new OpenFileDialog(); 
    if (openDialog.ShowDialog() == DialogResult.OK) 
    { 
    if (pictureBox1.Image != null) 
     pictureBox1.Image.Dispose(); 

     image1 = new Bitmap(openDialog.FileName); 
     pictureBox1.Image = image1; 
    } 
} 
+3

당신은 오래된 이미지를 폐기하지 않으므로 앱이 새어 나옵니다 – Plutonix

+0

어떻게 이전 이미지를 삭제할 수 있습니까? – ShmuelCohen

+1

'if (pictureBox1.Image! = null) pictureBox1.Image.Dispose()':) –

답변

1

참고 : 이미지에 대한 마지막 참조를 해제하기 전에는 항상 Dispose를 호출해야합니다. 그렇지 않으면 가비지 수집기가 Image 객체의 Finalize 메서드를 호출 할 때까지 사용중인 리소스가 해제되지 않습니다.

설명서에 따르면 Dispose으로 전화해야합니다. 이미지에서 추출한 다음 처분하려면 Using 키워드를 사용하는 것이 좋습니다. 예 : : 실행이 using 중괄호 잎

using(var bmp = new Bitmap(bitmapLocation)){ 
    // extract data from bitmap 
} 

후에는, 비트 맵의 ​​Dispose 메소드가 호출되고 개체가 배치됩니다.