Laden...

Hinzufügen vieler Elemente zu ListBox -> Langsam

Erstellt von haja0011 vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.652 Views
H
haja0011 Themenstarter:in
19 Beiträge seit 2008
vor 12 Jahren
Hinzufügen vieler Elemente zu ListBox -> Langsam

Hallo,

ich habe x Threads welche einen Event auslösen und über

public delegate void UpdateMailSendingCallback(MessageWrapper msg, MailState mailState);

dann das Frontend aktualisieren. Jeder Thread aktualisiert das Frontend vielleicht 1-4 mal pro Sekunde je nach Datenmenge.
Das Frontendelement welches aktualisiert wird ist eine ListBox.

myServerControl.mailingOutput.Items.Add(msg.MessagePath);

Bis jetzt füge ich direkt Strings zu der ListBox hinzu. Es können in der ListBox 10000 - mehrere 100000 Elemente werden. Jetzt dauert das Hinzufügen zur ListBox aber schon bei 6000 elementen so lange das, dass Frontend "einfriert".
Was ich mir überlegt habe ist, dass ich den String in eine Klasse kapsel, und das Element auch nicht mehr direkt in das Control hinzufügen, sondern eine Liste vom Typ meiner Klasse (die Klasse, welche den String kapselt). Die Kapazität kann ich bis auf eine Ausnahme berechnen und die Liste direkt mit der Kapazität initialisieren. Dann würde ich die Liste per Databinding an das Control binden. Am liebsten würde ich auch noch immer zum letzten hinzugefügten Element scrollen.

Meine Fragen sind jetzt:
-Gibt es ein effizienteres Control für große Datenmengen als die ListBox?
-Soll ich lieber eine List<String> oder eine List<OnjektMitGekapseltemString> nehmen?
-Kann ich in der ListBox immer nur einen Teil der Daten anzeigen? Z.B. immer die letzten 20 der ListBox und beim scrollen dann die nächsten 20...
-Wie geht man am Besten mit solchen Datenmengen um?

Danke und Viele Grüße
Jan

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo haja0011,

10000 - mehrere 100000 Elemente

Welcher Benutzer darf sich damit konfrontiert fühlen?
Überlege ernsthaft ob es notwendig ist diese (unüberschaubare) Inforamtionsmenge and die UI zu leiten. Ich meine das ist nicht sinnvoll.
Wenns um das Durchsuchen für Kontrollzwecke, etc. gehen soll dann lade nur die tatsächlich benötigten Information. Das Problem das du jetzt hast existiert dann gar nicht.

Auch der Kapselungsversuch wird dich bei dieser Menge nciht ans Ziel bringen.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

H
haja0011 Themenstarter:in
19 Beiträge seit 2008
vor 12 Jahren

Hallo gfoidl,

das Projekt ist ein Mailsendetool für Testzwecke für Mailing Systeme. Das ganze ist eine Art Log. Jeder Eintrag sagt ob die Mail erfolgreich gesendet werden konnte, den Pfad zur Mail oder ob es einen Fehler gab und wenn, was für einen. Fehler kann z.B. sein, dass die Mail zu groß war, der Mailserver nicht verfügbar war...

Bis jetzt habe ich einfach nach 3000 Nachrichten aufgehört alles zu loggen und nur noch die Fehler geloggt, bis zu 10000 Einträgen, und dann auch damit aufgehört. Wenn ich ein paar mehr anzeigen könnte währe es schon nicht schlecht.

Gruß
Jan

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo haja0011,

sagt die Virtualizing etwas? Sonst schau dir das an - damit kannst du das umsetzen. Guck dir auch Optimizing Performance: Controls an.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

C
1.214 Beiträge seit 2006
vor 12 Jahren

Wenn das ein Log ist, dann bietet es sich doch an, nur die letzten 100 oder so Einträge anzuzeigen und die anderen nur in eine Datei zu schreiben (wenn überhaupt). Du könntest auch die Einträge behalten, die auf Fehler hinweisen, und die erfolgreichen schneller wieder entfernen.

M
402 Beiträge seit 2005
vor 12 Jahren

Ich frag mich grad etwas...

Diese Liste soll ja vermutlich irgendwie ausgewertet werden.
Also warum ein Fehler aufgetreten ist...

Die Fehlereinträge bei mehreren 10k Einträgen zu lokalisieren
ist sicher nicht grad komfortabel bzw. übersieht man da bestimmt
einige.

Wäre es da nicht sinnvoller nur die Fehler-Einträge in der Liste anzuzeigen
und eventuell zusätzlich Fehler und "normale" Einträge in 2 Files zu loggen?
Meiner Meinung nach sind ja nur die Fehler wichtig.

just my 2 cents...

H
haja0011 Themenstarter:in
19 Beiträge seit 2008
vor 12 Jahren

Hallo,

Ja das werde ich wohl machen. Also nur die Fehler anzeigen. Dann sehe ich mir noch die Sache mit der Virtualisierung an. Dann wird das was.

Danke.
Gruss Jan