| |

VB.NET - FortgeschritteneFehlermeldung: ContextSwitchDeadlock erkannt | |  | Autor: Moeppel | Datum: 06.01.09 17:11 |
| Hallo,
ich programmiere nun seit einiger Zeit an einem sehr komplizierten Verschlüsslungs-Programm herum.
Ich habe einen Button und wenn man den drückt, soll die vorher angegebene Datei verschlüsselt werden.
Das Programm läuft mittlerweile schon fehlerfrei. Nur wenn ich den Button drückte wird ein etwa 70 Zeilen langer Code abgearbeitet, der immer 2mal eine For-Next-Schleife, wobei die Anzahl der Bytes der zu verschlüsselnde Datei als For-Next-Länge gilt und 2mal eine For-Next-Schleife mit 256 Wiederholungen gilt.
z.B.:
For i as Integer 0 to ByteZahlDerZuVerschlüsselndenDatei bzw. 256
...durchschnittlich 6 Zeilen langer Code
Next i Wenn man alle aufgerufenen Funktionen, Eigenschaftenzuweisungen und so zusammemzählt könnte man schon auf circa 25000 kommen (und das nur bei einer 12KB großen Datei!). Wenn das Programm verschlüsselt, hängt es sich für ein paar Sekunden mal auf (bei 12 KB Dateien), fängt sich aber wieder ein. Die Speicherauslastung nimmt nicht zu (das Programm braucht circa 25k).
Ich habe auch einen Abbrechen-Button, nur wenn ich den klicken will hängt sich das Programm "offiziell" auf, hinter den Kulissen läuft es jedoch weiter. Da das der Endbenutzer bei großen Dateien das ja nicht weiß, gibts ja auch eine Progressbar, die ist funktioniert auch schon bei kleinen Dateien, nur bei großen nicht.
Bei Dateien, die jedoch größer als ca 120 KB sind, zeigt VB 2008 Express im Debugmodus folgende Fehlermeldung:
ContextSwitchDeadlock erkannt
Die CLR konnte 60 Sekunden lang keinen Übergang vom COM-Kontext 0x1fc3c0 zum COM-Kontext 0x1fc530 durchführen. Der Thread, der Besitzer des Zielkontexts oder -apartments ist, wartet entweder, ohne Meldungen zu verschieben, oder verarbeitet eine äußerst lang dauernde Operation, ohne Windows-Meldungen zu verschieben. Eine solche Situation beeinträchtigt in der Regel die Leistung und kann sogar dazu führen, dass die Anwendung nicht mehr reagiert oder die Speicherauslastung immer weiter zunimmt. Zur Vermeidung dieses Problems sollten alle STA-Threads (Singlethread-Apartment) primitive Typen verwenden, die beim Warten Meldungen verschieben (z.B. CoWaitForMultipleHandles), und bei lange dauernden Operationen generell Meldungen verschieben.
Ich habe auch schon zu Singlethread-Apartment, ContextSwitchDeadlock und so gegooglet (auch auf msdn.com), habe aber nur irgendwelches Kauderwelsch gefunden.
Wenn das Programm fertig ist, sollte es so ähnlich wie WinRar sein, aber dass ein immer anders generierter Schlüssel verwendet wird. Wen WinRar irgendetwas packt, hängt es sich ja auch nicht auf, sondern macht einfach seelnruhig weiter und man kann den Abbrechen-Button drücken, aber das tut mein Programm nicht, soll es aber mal.
Kann mir da mal jemand bitte helfen??
Freue mich auch schon auf viele Antworten
PS: wenn's von Belangen ist, noch ein paar Informationen:
ich habe ein Core-Duo-Prozessor mit 1,66 GHz, 512 MB RAM und verwende MS Windows XP SP3 mit .NET-Framework 3.5 SP1 und Visual Basic 2008 Express. |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
sevISDN 1.0 
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) TOP! Unser Nr. 1 
Neu! sevDataGrid 3.0
Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. Weitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|