Hallo Leute, ich bin es mal wieder mit neuen Problemen.
ich habe eine ListView. Die fülle ich mit Daten (es ist ein Telefonbuch und hat daher sehr viele Einträge ~50.000). Wenn ich nun den Tab öffne, in dem sich das Telefonbuch befindet, bleibt das Programm stehen und lädt erstmal fröhlich Daten und nutzt auch viel RAM. Nach etwa 20 Sekunden ist die ListView geladen und die Daten werden angezeigt. Aber das Programm verhält sich äußerst träge. Das heißt einen anderen Eintrag auswählen braucht Zeit. Ich hatte erst das Binding im Verdacht, dass mir die Selection der ListView auf eine Detail-Ansicht gibt. Habe die Bindings gelöscht. Aber das Problem bleibt erhalten.
Ich habe der ListView lediglich ein DataTemplate gegeben, das einen TextBlock enthält mit drei Runs, sodass ich Nachnamen, Komma und Vornamen anzeige in der View.
An sich also nichts spektakuläres.
Und bevor jemand an den 50k Einträgen meckert:
In meiner Vorversion, die ausschließlich mit CodeBehind geschrieben ist benutze ich exakt die gleiche Liste und statt ListView eine Listbox und füge bei jeder suche alle Einträge manuell hinzu. Da habe ich, wenn ich alle Einträge auf einmal hinzufüge etwa 2 Sekunden "freeze". Der RAM Verbrauch bei der alten Version steigt um etwa 100 MB, was ich für die Datenmenge auch als plausibel empfinde. Bei der neuen Version habe ich nun aber das Problem, dass das Programm mit etwa 60 MB im RAM steht und wenn ich die ListView aktiv fülle, der RAM Bedarf auf bis zu 800 MB steigt. Fülle ich die Collection mit den Daten ohne sie an die View und damit die ListView zu binden, steigt der RAM Bereich auch nur etwa um 100 MB. Also muss da irgendwas sein, das ich falsch mache.
hat da jemand Erfahrung mit?
Und falls ihr da ein Projekt braucht, oder euch das anschauen müsst / möchtet... muss ich das erst aufbereiten und DummyWerte erzeugen. Diese dort befindlichen Daten sind von der Arbeit und damit kann ich die nicht einfach weitergeben (Datenschutz etc. ). Das kann ich aber erst frühestens morgen nachliefern. Aber vielleicht habt ihr sowas ja schon mal gesehen oder habt eine Vermutung.
EDIT: Ich habe auch schon versucht, mittels lazyLoading in der Collection mehrere NotifyChanged Meldungen zu ignorieren und das schneller zu machen. Aber hilft auch nichts. Und der Freeze sowie RAM-Auslastung bleiben persistent hoch
ich habe eine ListView. Die fülle ich mit Daten (es ist ein Telefonbuch und hat daher sehr viele Einträge ~50.000). Wenn ich nun den Tab öffne, in dem sich das Telefonbuch befindet, bleibt das Programm stehen und lädt erstmal fröhlich Daten und nutzt auch viel RAM. Nach etwa 20 Sekunden ist die ListView geladen und die Daten werden angezeigt. Aber das Programm verhält sich äußerst träge. Das heißt einen anderen Eintrag auswählen braucht Zeit. Ich hatte erst das Binding im Verdacht, dass mir die Selection der ListView auf eine Detail-Ansicht gibt. Habe die Bindings gelöscht. Aber das Problem bleibt erhalten.
Ich habe der ListView lediglich ein DataTemplate gegeben, das einen TextBlock enthält mit drei Runs, sodass ich Nachnamen, Komma und Vornamen anzeige in der View.
An sich also nichts spektakuläres.
Und bevor jemand an den 50k Einträgen meckert:
In meiner Vorversion, die ausschließlich mit CodeBehind geschrieben ist benutze ich exakt die gleiche Liste und statt ListView eine Listbox und füge bei jeder suche alle Einträge manuell hinzu. Da habe ich, wenn ich alle Einträge auf einmal hinzufüge etwa 2 Sekunden "freeze". Der RAM Verbrauch bei der alten Version steigt um etwa 100 MB, was ich für die Datenmenge auch als plausibel empfinde. Bei der neuen Version habe ich nun aber das Problem, dass das Programm mit etwa 60 MB im RAM steht und wenn ich die ListView aktiv fülle, der RAM Bedarf auf bis zu 800 MB steigt. Fülle ich die Collection mit den Daten ohne sie an die View und damit die ListView zu binden, steigt der RAM Bereich auch nur etwa um 100 MB. Also muss da irgendwas sein, das ich falsch mache.
hat da jemand Erfahrung mit?
Und falls ihr da ein Projekt braucht, oder euch das anschauen müsst / möchtet... muss ich das erst aufbereiten und DummyWerte erzeugen. Diese dort befindlichen Daten sind von der Arbeit und damit kann ich die nicht einfach weitergeben (Datenschutz etc. ). Das kann ich aber erst frühestens morgen nachliefern. Aber vielleicht habt ihr sowas ja schon mal gesehen oder habt eine Vermutung.
EDIT: Ich habe auch schon versucht, mittels lazyLoading in der Collection mehrere NotifyChanged Meldungen zu ignorieren und das schneller zu machen. Aber hilft auch nichts. Und der Freeze sowie RAM-Auslastung bleiben persistent hoch
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „PadreSperanza“ ()