2017-12-22 68 views
2

파일의 이미지를 Windows Forms Panel 컨트롤에 추가하는 다음 코드가 있습니다.동적으로 추가 된 컨트롤의 메모리 사용량을 줄입니다.

private void AddImageButton_Click(object sender, EventArgs e) 
    { 
     if (AddImageFileDialog.ShowDialog() == DialogResult.OK) 
     { 
      using (FileStream stream = new FileStream(AddImageFileDialog.FileName, FileMode.Open, FileAccess.Read)) 
      using (BinaryReader reader = new BinaryReader(stream)) 
      { 
       var memoryStream = new MemoryStream(reader.ReadBytes((int)stream.Length)); 
       AddImage(new Bitmap(memoryStream)); 
      } 
     } 
    } 

private void AddImage(Bitmap image) 
    { 
     var pictureBox = new PictureBox(); 

     pictureBox.Name = Guid.NewGuid().ToString(); 
     pictureBox.Image = image; 
     pictureBox.Width = 40; 
     pictureBox.Height = 40; 
     pictureBox.SizeMode = PictureBoxSizeMode.Zoom; 
     pictureBox.Click += OnImageClicked; 

     ImagePanel.Controls.Add(pictureBox); 
    } 

1) 앱을 실행할 때 메모리 사용량은 약 18MB입니다.

2) FileDialog 창을 열 때 메모리 사용량은 약 50MB입니다.

3) 내가 추가 한 모든 이미지에서 메모리가 2-10MB 증가했습니다.

그래서 20 개의 이미지를 추가하면 메모리 사용량이 100MB를 넘습니다.

나는 뭔가 잘못했다고 느낍니다. 그러나 나는 정확히 무엇을 얻을 수 없습니다. 제 실수를 찾아 내고 왜 문제가 존재하는지 설명해 주시겠습니까?

업데이트 0

내가 부분적으로 큰 비트 맵 폐기를 새 비트 맵 40x40px에 복사 소스 큰 비트 맵으로 문제를 해결하고 전화(). 하지만 내 응용 프로그램은 여전히 ​​약 50MB의 메모리를 사용합니다. 나는 문제의 근원이 FileDialog라고 생각한다. 그것은 기억을 먹는다.

+0

이미지를로드하고 보유하는 것은 무료가 아닙니다. 너는 무엇을 기대 했는가? – MickyD

+0

이미지를 추가 한 후에'MemoryStream memoryStream'을 닫으십시오. –

+0

@ DanSchnau 문서에 따라 MemoryStream을 열어 두어야합니다. https://msdn.microsoft.com/en-us/library/z7ha67kw(v=vs.110).aspx –

답변

0

으로 고정되어있는 문제. 그것을 봐.

+0

이것은 수정 사항이 아니며 단지 기본 구성 요소를 비난 한 것이 아닙니다. 문제가 있는지 파일 펜디 얼로그로만 새 앱을 만들었습니까? –