WPF Memory Nutzung

Anwendung:

  • WPF-Anwendung, bestehend aus einer textbox auf top und eine listbox unten
  • Benutzer geben Sie eine Zeichenfolge in das Textfeld, um Mitarbeiter suchen, und die Suchergebnisse angezeigt werden in der ListBox
  • ListBox verwendet DataTemplates zur Anzeige Elemente (zeigt die Mitarbeiter-name, Abteilung, Telefon und ein thumbnail-Bild.)

Umsetzung:

  • Beim Start der Anwendung habe ich die Datenbank Abfragen und abrufen aller Mitarbeiter und die damit verbundenen Informationen angezeigt werden in der ListBox. Dies ist im Speicher gehalten die ganze Zeit.
  • Nach dem Start der Anwendung werden alle durchsuchbaren Daten in den Speicher und sucht sind praktisch augenblicklich. Alle Suchvorgänge werden durchgeführt, auf der bereits Daten im Speicher.
  • Suchergebnisse angezeigt werden in der ListBox mit DataTemplates. Miniaturansicht, Bild, name, Telefon, Abteilung, etc, sind in jedem ListBox-Element.

Problem:

  • Beim Start die Speicherauslastung ist über 200MB.
  • Als änderung der Daten in das Listenfeld, die entweder über eine neue Suche oder einfach nach unten scrollen die listbox, die Speicherauslastung erhöht.
  • Wenn Benutzer einen Bildlauf durch das Listenfeld langsam, Speicher schneller. Wie Sie Blättern Sie nach oben und unten Speicher erreicht schnell 1 GB.

Gibt es keinen code erstellen-Steuerelemente manuell - alles erfolgt über data binding.

Warum sehe ich dieses Verhalten? Was kann ich tun, um es zu beheben? Bitte um Hilfe!!

UPDATE:
Ich habe herausgefunden, dass das problem nicht ein memory-leak. Das Problem hier ist, dass die listbox erstellen von Objekten für die Anzeige der Bilder des Mitarbeiters und ist nicht frei für den garbage collector nach dem listboxitem steigt aus dem Fenster. Die CleanUpVirtualizedItem Ereignis Auftritt, wie ich erwartet hatte, aber der Speicher ist noch nicht veröffentlicht. Irgendwelche Ideen?

  • Naja, eigentlich "istbox ist die Erstellung von Objekten für die Anzeige der Bilder des Mitarbeiters und ist nicht frei für den garbage collector nach dem listboxitem wird aus dem Fenster" - ist ein Speicher-Leck
  • Dies ist nur Semantik und es macht keinen Unterschied, aber wenn Sie haben ein Objekt und das Objekt den Speicher, dies ist keinen Speicherverlust. Ein Leck wäre, wenn das Objekt Weg ist und der Speicher noch reserviert, zum Beispiel.
  • oh, vielleicht hast du Recht, aber diese definition passt wohl nur für nicht verwalteten code. ich habe zwar gesehen, in der .NET-Welt, wie zum Beispiel die Definitionen von einem Speicherleck.
Schreibe einen Kommentar