我收到了我无法解决的错误消息。它源自Visual Studio或调试器。我不确定最终的错误情况是在VS,调试器,我的程序还是数据库中。
这是Windows应用程序。不是网络应用。
VS发出的第一条消息是一个弹出框,上面显示:“没有为任何调用堆栈框架加载任何符号。无法显示源代码。” 单击该按钮后,我得到:“ 检测到ContextSwitchDeadlock ”,以及下面复制的一则长消息。
该错误出现在向下扫描DataTable的循环中。对于每一行,它将表中的键(HIC#)值用作SqlCommand的参数。该命令用于创建返回一行的SqlDataReader。比较数据。如果检测到错误,则将一行添加到第二个DataTable。
该错误似乎与过程运行多长时间(即60秒后)有关,而不是与发现多少错误有关。我不认为这是内存问题。循环内未声明任何变量。唯一创建的对象是SqlDataReaders,它们位于Using结构中。添加System.GC.Collect()无效。
该数据库是同一台便携式计算机上的SqlServer站点。
表单上没有精美的小玩意或小工具。
我不知道此过程中的任何事情与我之前数十次所做的事情有很大不同。我之前已经看过错误,但是从来没有始终如一。
有什么想法吗?
完整错误文本: 60秒钟以来,CLR无法从COM上下文0x1a0b88过渡到COM上下文0x1a0cf8。拥有目标上下文/公寓的线程很可能要么执行非泵送等待,要么处理很长时间运行的操作而不泵送Windows消息。这种情况通常会对性能造成负面影响,甚至可能导致应用程序变得无响应或随着时间的推移不断累积内存使用量。为避免此问题,所有单线程单元(STA)线程都应使用泵送等待原语(例如CoWaitForMultipleHandles),并在长时间运行的操作中定期泵送消息。