Otrzymuję komunikat o błędzie, którego nie mogę rozwiązać. Pochodzi z Visual Studio lub debuggera. Nie jestem pewien, czy ostateczny warunek błędu jest w VS, debugger, mój program lub bazy danych.Visual Studio: ContextSwitchDeadlock
To jest aplikacja dla systemu Windows. Nie jest to aplikacja internetowa.
Pierwsza wiadomość od VS to wyskakujące okienko z informacją: "Żadne symbole nie są ładowane dla żadnej ramki stosu wywołań Nie można wyświetlić kodu źródłowego." Po kliknięciu otrzymuję: "Wykryto ContextSwitchDeadlock" wraz z długim komunikatem przedstawionym poniżej.
Błąd pojawia się w pętli, która skanuje w dół DataTable. Dla każdej linii wykorzystuje wartość klucza (HIC#) z tabeli jako parametr SqlCommand. Polecenie służy do utworzenia SqlDataReader, który zwraca jedną linię. Dane są porównywane. W przypadku wykrycia błędu wiersz jest dodawany do drugiej tabeli DataTable.
Błąd wydaje się być związany z czasem działania procedury (tj. Po 60 sekundach), a nie z liczbą błędów. Nie sądzę, żeby to był problem z pamięcią. Żadne zmienne nie są zadeklarowane w pętli. Jedynymi stworzonymi obiektami są SqlDataReaders i są one w użyciu struktur. Add System.GC.Collect() nie przyniósł żadnego efektu.
Baza danych jest witryną SqlServer na tym samym laptopie.
W formularzu nie ma fantazyjnych gadżetów ani gadżetów.
Nie jestem świadomy niczego w tym proc, który znacznie różni się od tego, co zrobiłem dziesiątki razy wcześniej. Widziałem już wcześniej ten błąd, ale nigdy nie w spójny sposób.
Jakieś pomysły, ktoś?
Pełna błędu Tekst: CLR nie był w stanie przejść od kontekstu COM 0x1a0b88 kontekstu COM 0x1a0cf8 przez 60 sekund. Wątek, który jest właścicielem kontekstu docelowego/mieszkania, najprawdopodobniej robi czekanie bez pompowania lub przetwarza bardzo długą operację bez pompowania komunikatów systemu Windows. Sytuacja ta ma ogólnie negatywny wpływ na wydajność, a nawet może prowadzić do braku reakcji aplikacji lub zużycia pamięci przez cały czas. Aby uniknąć tego problemu, wszystkie wątki z pojedynczym gwintowanym mieszkaniem (STA) powinny korzystać z podstawowych operacji pompowania (takich jak CoWaitForMultipleHandles) i rutynowo pompować komunikaty podczas długotrwałych operacji.
Tuż! Dzięki. Musiałem przejść do Dostosuj i dodaj Wyjątki do menu Debuguj. Nie jest to najbardziej intuicyjny aspekt interfejsu użytkownika. Narzędzia \ Dostosuj, a następnie Zmień układ poleceń (przycisk), a następnie wybierz opcję Debuguj z menu rozwijanego w prawym górnym rogu, a następnie przycisk Dodaj (przycisk). Whew! – SeaDrive
Tak, wygląda na to, że niektóre instalacje mają to w menu, a niektóre nie. Zauważyłem to również z innymi przydatnymi elementami menu, a ja jeszcze nie wiem, co je domyślnie włącza i wyłącza. – Pedro
'ctrl-alt-e' wyświetla okno dialogowe wyjątku. –