확인할 수없는 오류 메시지가 나타납니다. Visual Studio 또는 디버거에서 시작됩니다. 궁극적 인 오류 조건이 VS, 디버거, 내 프로그램 또는 데이터베이스인지 확실하지 않습니다.
이것은 Windows 앱입니다. 웹앱이 아닙니다.
VS의 첫 번째 메시지는 "콜 스택 프레임에로드 된 심볼이 없습니다. 소스 코드를 표시 할 수 없습니다."라는 팝업 상자입니다. 클릭하면 " ContextSwitchDeadlock이 감지되었습니다 "라는 메시지와 함께 아래에 긴 메시지가 표시됩니다.
DataTable을 스캔하는 루프에서 오류가 발생합니다. 각 줄에 대해 테이블의 키 (HIC #) 값을 SqlCommand의 매개 변수로 사용합니다. 이 명령은 한 줄을 반환하는 SqlDataReader를 만드는 데 사용됩니다. 데이터가 비교됩니다. 오류가 감지되면 행이 두 번째 DataTable에 추가됩니다.
오류는 발견 된 오류 수가 아니라 프로 시저 실행 시간 (60 초 후)과 관련이있는 것 같습니다. 메모리 문제라고 생각하지 않습니다. 루프 내에서 변수가 선언되지 않았습니다. 만들어진 유일한 개체는 SqlDataReaders이며, 사용중인 구조에 있습니다. System.GC.Collect () 추가는 효과가 없습니다.
db는 동일한 랩톱에있는 SqlServer 사이트입니다.
양식에 멋진 기즈모 또는 가젯이 없습니다.
나는이 과정에서 내가 수십 번했던 것과 크게 다른 것을 알지 못한다. 나는 이전에 오류를 보았지만 일관된 기준으로 보지 못했습니다.
어떤 아이디어라도?
전체 오류 텍스트 : CLR이 60 초 동안 COM 컨텍스트 0x1a0b88에서 COM 컨텍스트 0x1a0cf8로 전환 할 수 없습니다. 대상 컨텍스트 / 아파트를 소유 한 스레드는 비 펌핑 대기를 수행하거나 Windows 메시지를 펌핑하지 않고 매우 오래 실행되는 작업을 처리 할 가능성이 높습니다. 이러한 상황은 일반적으로 성능에 부정적인 영향을 미치며 응용 프로그램이 응답하지 않거나 시간이 지남에 따라 메모리 사용량이 지속적으로 누적 될 수 있습니다. 이 문제를 방지하려면 모든 단일 스레드 아파트 (STA) 스레드는 펌핑 대기 프리미티브 (예 : CoWaitForMultipleHandles)를 사용하고 장기간 실행되는 동안 정기적으로 메시지를 펌핑해야합니다.