我一直收到一个我无法解决的错误消息。它起源于Visual Studio或调试器。我不确定最终的错误条件是在VS中,调试器中,我的程序中,还是数据库中。
这是一个Windows应用程序,不是网页应用程序。
VS的第一个消息是一个弹出框,上面写着: "任何调用堆栈帧都没有加载符号。源代码无法显示。” 当点击离开,我得到: . "检测到ContextSwitchDeadlock",以及下面的长消息错误出现在扫描数据表的循环中。对于每一行,它使用表中的键(HIC #)值作为SqlCommand的参数。该命令用于创建一个SqlDataReader,返回一行。数据进行比较。如果检测到错误,则将一行添加到第二个数据表。
错误似乎与程序运行的时间(即60秒后)有关,而不是发现了多少错误。我不认为这是记忆问题。在循环中没有声明变量。唯一创建的对象是SqlDataReaders,它们在Using结构中。Add System.GC.Collect()没有效果。
db是同一台笔记本电脑上的SqlServer站点。
表单上没有花哨的小发明或小玩意。
在这个过程中,我没有发现任何与我以前做过的几十次有很大不同的地方。我以前见过这种错误,但从来没有一致的情况。
有人有什么想法吗?
完整错误 CLR在60秒内无法从COM上下文0x1a0b88转换到COM上下文0x1a0cf8。拥有目标上下文/公寓的线程很可能要么在执行一个非抽取等待,要么在不抽取Windows消息的情况下处理一个非常长时间运行的操作。这种情况通常会对性能产生负面影响,甚至可能导致应用程序变得无响应或内存使用量随着时间的推移不断累积。为了避免这个问题,所有单线程公寓(STA)线程都应该使用泵送等待原语(例如CoWaitForMultipleHandles),并在长时间运行的操作期间定期泵送消息