Hallo Zusammen Ich habe wieder eine Problem mit meiner Protokollierung von seriellen Daten (Telegramme). Ich empfange über eine serielle Schnittstelle Telegramme und speichere die Byte's in einen Ringpuffer und werte diesen zwischen dem Empfang aus und schreibe dann einen Langtext in eine richtTextbox um in dann anzusehen. txtProt.Text = txtProt.Text + "Tel.: " + (intRowCount) + "Text je Telegramm"; Das Problem ist die Geschwindigkeit, wenn ich nur die Auswertung mache und nicht den Langtext in die TextBox schreibe geht das flott aber mit der Ausgabe ist das nicht brauchbar weil der Puffer (50000 Byte) rasch voll ist. Hat jemand eine Idee wie ich die Ausgabe machen könnte. bitte. Danke. Lg. Johann K.
C#? Vielleicht mal mit StringBuilder und txtProt.AppendText(...) probieren. Ist es denn sinnvoll, bei jedem Update einen ellenlangen (Gesamt-)Text reinzustopfen? Kann man da überhaupt sinnvoll mitlesen? Und: Kannst du nicht ListBox/ListView o.ä. verwenden und dort einfach jeweils eine Zeile anhängen? Das dürfte ja schneller sein als immer den ganzen Text zu verarbeiten und reinzuschieben. Denk daran, dass Strings in C# immutable sind, da wird bei Textoperationen immer allokiert und kopiert (ok, beim Aneinanderhängen ist das ja eh klar). Da kommen also jeweils ein paar Bytes rein und du hantiert evtl. irgendwann jedes Mal mit einem riesigen Text. Ist ja logisch, dass es dabei früher oder später Probleme gibt.
Hallo Wurfbrot Der Name hat der etwas mit dem Tauben füttern zu tun, mit Brot hinwerfen, ist gut. Danke für deine Antwort ich werde mich etwas spielen. Lg. Johann K.
Klatec schrieb: > Ich habe wieder eine Problem mit meiner Protokollierung von seriellen > Daten (Telegramme). > Ich empfange über eine serielle Schnittstelle Telegramme und speichere > die Byte's in einen Ringpuffer und werte diesen zwischen dem Empfang aus > und schreibe dann einen Langtext in eine richtTextbox um in dann > anzusehen. > > txtProt.Text = txtProt.Text + "Tel.: " + (intRowCount) + "Text je > Telegramm"; > > Das Problem ist die Geschwindigkeit, wenn ich nur die Auswertung mache > und nicht den Langtext in die TextBox schreibe geht das flott aber mit > der Ausgabe ist das nicht brauchbar weil der Puffer (50000 Byte) rasch > voll ist. Hat jemand eine Idee wie ich die Ausgabe machen könnte. bitte. > Danke. Vielleicht ist Multithreading eine Lösung für Dich: ein Thread nimmt die seriellen Daten entgegen und schreibt sie in den Ringpuffer, ein zweiter liest die Daten aus dem Ringpuffer und gibt sie aus.
> txtProt.Text = txtProt.Text + "Tel.: " + (intRowCount) + "Text je
Telegramm";
Bei so einem Konstrukt sollte man sich genauer den effektiven Vorgang
anschauen. Ich hatte das auch mal. Dabei wurde eine neue Variable um N
Bytes groesser auf dem Heap angelegt, dann alles bisherige kopiert, das
neue angehaengt, und dann der Pointer drauf gewechselt. Im Sinne von wie
kriege ich 3GHz in die Knie.
Ich hab dann statisch ein grosszuegiges array aus charactern angelegt,
zB 50MByte, drauf geschrieben, gefuellt, ein neues angelegt, das alte
auf die disk, oder auch nicht. Das war beliebig viel schneller.
Die Aufgabe war das Laden von Textdaten. Im Sinne von aus 15 Minuten
mach 10 Sekunden.
Klatec schrieb: > txtProt.Text = txtProt.Text + "Tel.: " + (intRowCount) + "Text je > Telegramm"; Wozu wurden eigentlich Tabellen mit Spaltenüberschriften erfunden. Den ganzen redundanten Text musst du beim Lesen jedesmal mit durch deine Verarbeitung im Hirn schieben. Meinst du, dass das das Lesen ernsthaft erleichtert? Aber wenn es denn unbedingt sein muss: Hat deine Rich-Text-Box keine effiziente Append Methode?
Hallo Zusammen Ich habe die Idee vom Kollegen Wurfbrot aufgenommen und statt der TextBox eine ListBox verwendet und es funktioniert wunderbar. Ich möchte nicht gewaltig viel Zeit investieren weil das Programm nur ein Behelf für den Bau einer Baugruppe (XpressNet Ankopplung, Modellbahn, Firma Lenz) ist und dann nicht mehr benötigt wird. Ich bedanke mich für die Anregungen. Super. Lg. Johann K.
Hallo, ich empfehle Dir eine Gridview, dann ist Zeilenbasieren, Zeitstempel, Kommandos, etc. haben Ihre eigene Spalte. Die Gridview lässt sich sehr einfach anpassen für deine optischen Anforderungen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.