ฉันได้รับข้อความแสดงข้อผิดพลาดที่ไม่สามารถแก้ไขได้ มันมาจาก Visual Studio หรือดีบักเกอร์ ฉันไม่แน่ใจว่าเงื่อนไขข้อผิดพลาดขั้นสุดท้ายอยู่ใน VS, ดีบักเกอร์, โปรแกรมของฉันหรือฐานข้อมูล
นี่คือแอพ Windows ไม่ใช่เว็บแอป
ข้อความแรกจาก VS คือกล่องป๊อปอัพที่พูดว่า: "ไม่มีสัญลักษณ์ถูกโหลดสำหรับกรอบการโทรสแต็คใด ๆ รหัสแหล่งที่มาไม่สามารถแสดงได้" เมื่อคลิกแล้วฉันจะได้รับ: " ตรวจพบ ContextSwitchDeadlock " พร้อมกับข้อความยาวที่ทำซ้ำด้านล่าง
ข้อผิดพลาดเกิดขึ้นในการวนรอบที่สแกน DataTable สำหรับแต่ละบรรทัดจะใช้ค่าคีย์ (HIC #) จากตารางเป็นพารามิเตอร์สำหรับ SqlCommand คำสั่งถูกใช้เพื่อสร้าง SqlDataReader ซึ่งส่งคืนหนึ่งบรรทัด เปรียบเทียบข้อมูล หากตรวจพบข้อผิดพลาดแถวจะถูกเพิ่มไปยัง DataTable ที่สอง
ดูเหมือนว่าข้อผิดพลาดจะเกี่ยวข้องกับระยะเวลาที่โพรซีเดอร์ใช้ในการรัน (เช่นหลังจาก 60 วินาที) ไม่พบข้อผิดพลาดจำนวนเท่าใด ฉันไม่คิดว่ามันเป็นปัญหาหน่วยความจำ ไม่มีการประกาศตัวแปรภายในลูป วัตถุเท่านั้นที่สร้างขึ้นคือ SqlDataReaders และพวกเขาอยู่ในการใช้โครงสร้าง เพิ่ม System.GC.Collect () ไม่มีผลใด ๆ
db เป็นไซต์ SqlServer บนแล็ปท็อปเครื่องเดียวกัน
ไม่มี gizmos แฟนซีหรือแกดเจ็ตในแบบฟอร์ม
ฉันไม่รู้อะไรเลยใน proc นี้ซึ่งแตกต่างอย่างมากจากสิ่งที่ฉันทำมาหลายสิบครั้งก่อน ฉันเคยเห็นข้อผิดพลาดมาก่อน แต่ไม่เคยอยู่บนพื้นฐานที่สอดคล้องกัน
ความคิดใด ๆ ใคร
ข้อความแสดงข้อผิดพลาดแบบเต็ม: CLR ไม่สามารถเปลี่ยนจากบริบท COM 0x1a0b88 เป็นบริบท COM 0x1a0cf8 เป็นเวลา 60 วินาที เธรดที่เป็นเจ้าของบริบท / อพาร์ทเมนต์ปลายทางส่วนใหญ่มีแนวโน้มที่จะทำการรอปั๊มหรือการดำเนินการที่ใช้เวลานานโดยไม่ต้องปั๊มข้อความ Windows สถานการณ์นี้โดยทั่วไปมีผลกระทบด้านลบต่อประสิทธิภาพและอาจทำให้แอปพลิเคชันไม่ตอบสนองหรือการใช้หน่วยความจำสะสมอย่างต่อเนื่องเมื่อเวลาผ่านไป เพื่อหลีกเลี่ยงปัญหานี้เธรดอพาร์ทเมนต์เธรดเดียวทั้งหมด (STA) ควรใช้การปั๊มแบบดั้งเดิมที่รอคอย (เช่น CoWaitForMultipleHandles) และปั๊มข้อความเป็นประจำในระหว่างการดำเนินการที่ยาวนาน