Entwickler-Ecke

WinForms - C# Caesar-tool "ContextSwitchDeadlock"


karozocker - Sa 24.04.10 08:31
Titel: C# Caesar-tool "ContextSwitchDeadlock"
-vom User entfernt-


Kha - Sa 24.04.10 11:08

Du solltest hin und wieder Application.DoEvents aufrufen oder gleich einen BackgroundWorker einsetzen, dann wird sich Windows auch nicht beschweren, dass dein Programm scheinbar hängen geblieben ist ;) .

PS: Von wie viel Text reden wir hier überhaupt? Ich wette, dass die Interaktion mit den Controls 99% der Zeit frisst. Führe PerformStep nur bei jedem hundertsten Zeichen aus und schreibe nicht direkt in ausgabe.Text, sondern erst einmal in einen StringBuilder.
PPS: Das dürfte die dichteste Kommentierung sein, die ich jemals gesehen habe :zwinker: .


karozocker - Sa 24.04.10 21:16

-vom User entfernt-


Kha - Sa 24.04.10 23:16

user profile iconkarozocker hat folgendes geschrieben Zum zitierten Posting springen:
-Ich Rede hier von enorm viel Text: Ich habe zum Testen das erste Kapitel eines Buches reingeschrieben: http://gutenberg.spiegel.de/?id=5&xid=577&kapitel=2&cHash=d780c7683f2#gb_found
Ach, doch so wenig - das nimmt meine TextBox gar nicht auf, sondern schneidet bei short.MaxValue ab :lol: .
Wie du selbst beschreibst, wächst die Zeit quadratisch zur Textlänge; die Controls spielen also keine Rolle, es ist tatsächlich nur das Erstellen von immer längeren String-Instanzen durch +. Mit einem StringBuilder komme ich auf 10 Sekunden, von denen interessanterweise 9 auf StringBuilder.ToString entfallen - das könntest du nur vermeiden, wenn du eine intelligentere TextBox baust, die nur den jeweils gerade angezeigten Text im Speicher hält, oder, falls es eigentlich darum geht, eine Datei zu übersetzen, direkt mit Streams arbeitest.


karozocker - Sa 24.04.10 23:25

-vom User entfernt-