2017-12-22 12 views
2

Ich habe den folgenden Code, der Bilder aus Datei zu Windows Forms Panel Control hinzufügen.Verringern der Speicherauslastung von dynamisch hinzugefügten Steuerelementen

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) Wenn ich meine App ausführen, ist die Speicherauslastung etwa 18 MB.

2) Wenn ich ein FileDialog-Fenster öffne, beträgt die Speicherbelegung ungefähr 50 MB.

3) Mit jedem Bild, das ich hinzufüge, Speicher um 2-10MB erhöht.

Also, wenn ich 20 Bilder hinzufügen, ist die Speichernutzung über 100 MB.

Ich fühle, dass ich etwas falsch mache, aber ich kann nicht genau was bekommen. Können Sie mir helfen, meinen Fehler zu finden und zu erklären, warum das Problem besteht?

aktualisieren 0

ich das Problem von zu kopier großen Bitmap neue Bitmap 40x40px teilweise beheben und große Bitmap Entsorgen() aufrufen. Aber meine App nutzt immer noch etwa 50 MB Speicher. Ich denke, dass die Ursache eines Problems FileDialog ist. Es isst die Erinnerung.

+0

Das Laden und Halten von Bildern ist nicht kostenlos. Was hast du erwartet? – MickyD

+0

Sie könnten versuchen, Ihren 'MemoryStream memoryStream' zu schließen, nachdem Sie das Bild hinzugefügt haben. –

+0

@DanSchnau Sie müssen den MemoryStream entsprechend der Dokumentation geöffnet lassen. https://msdn.microsoft.com/en-us/library/z7ha67kw(v=vs.110).aspx –

Antwort

0

Problem behoben mit Update 0. Schau es dir an.

+0

Dies ist kein Fix, Sie haben nur eine zugrunde liegende Komponente beschuldigt. Haben Sie eine neue App mit nur einem Dateiopendialog erstellt, um festzustellen, ob das Problem besteht? –

Verwandte Themen