vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Fehlermeldung: 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.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Fehlermeldung: ContextSwitchDeadlock erkannt2.589Moeppel06.01.09 17:11
Re: Fehlermeldung: ContextSwitchDeadlock erkannt1.225Moeppel06.01.09 20:09
Re: Fehlermeldung: ContextSwitchDeadlock erkannt1.187honsa25.02.09 08:49
Re: Fehlermeldung: ContextSwitchDeadlock erkannt1.229ModeratorDaveS07.01.09 12:50

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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