파일의 이미지를 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라고 생각한다. 그것은 기억을 먹는다.
이미지를로드하고 보유하는 것은 무료가 아닙니다. 너는 무엇을 기대 했는가? – MickyD
이미지를 추가 한 후에'MemoryStream memoryStream'을 닫으십시오. –
@ DanSchnau 문서에 따라 MemoryStream을 열어 두어야합니다. https://msdn.microsoft.com/en-us/library/z7ha67kw(v=vs.110).aspx –