Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Hinzufügen vieler Elemente zu ListBox -> Langsam
haja0011
myCSharp.de - Member



Dabei seit:
Beiträge: 21

Themenstarter:

Hinzufügen vieler Elemente zu ListBox -> Langsam

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7559
Herkunft: Waidring

beantworten | zitieren | melden

Hallo haja0011,
Zitat
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!"
private Nachricht | Beiträge des Benutzers
haja0011
myCSharp.de - Member



Dabei seit:
Beiträge: 21

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7559
Herkunft: Waidring

beantworten | zitieren | melden

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!"
private Nachricht | Beiträge des Benutzers
Coder007
myCSharp.de - Member



Dabei seit:
Beiträge: 1249

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
[email protected]
myCSharp.de - Member



Dabei seit:
Beiträge: 407

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
haja0011
myCSharp.de - Member



Dabei seit:
Beiträge: 21

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers