当前位置:  开发笔记 > 编程语言 > 正文

Visual Studio:ContextSwitchDeadlock

如何解决《VisualStudio:ContextSwitchDeadlock》经验,为你挑选了5个好方法。

我收到了一条无法解决的错误消息.它源自Visual Studio或调试器.我不确定最终的错误条件是在VS,调试器,我的程序还是数据库中.

这是一个Windows应用程序.不是网络应用程序.

来自VS的第一条消息是一个弹出框,说:"没有为任何调用堆栈帧加载符号.源代码无法显示." 当点击它时,我得到:" 检测到ContextSwitchDeadlock ",以及下面再现的长消息.

在向下扫描DataTable的循环中出现错误.对于每一行,它使用表中的键(HIC#)值作为SqlCommand的参数.该命令用于创建返回一行的SqlDataReader.数据进行比较.如果检测到错误,则将行添加到第二个DataTable.

该错误似乎与程序运行所需的时间(即60秒后)有关,而不是发现了多少错误.我不认为这是一个记忆问题.循环中没有声明变量.创建的唯一对象是SqlDataReaders,它们位于Using结构中.添加System.GC.Collect()无效.

db是同一台笔记本电脑上的SqlServer站点.

表格上没有花哨的小玩意儿或小工具.

我不知道这个过程中有什么东西与我以前做过的几十次大不相同.我以前看过这个错误,但从来没有一贯的.

任何想法,任何人?

完整错误文本: CLR无法从COM上下文0x1a0b88转换到COM上下文0x1a0cf8达60秒.拥有目标上下文/公寓的线程很可能是在非抽空等待或处理非常长时间运行的操作而不抽取Windows消息.这种情况通常会对性能产生负面影响,甚至可能导致应用程序变得无响应或内存使用量随时间不断累积.为了避免这个问题,所有单线程单元(STA)线程都应该使用抽取等待原语(例如CoWaitForMultipleHandles)并在长时间运行操作期间定期泵送消息.



1> Pedro..:

ContextSwitchDeadlock并不一定意味着您的代码存在问题,只是存在潜在问题.如果您进入Debug > Exceptions菜单并展开Managed Debugging Assistants,您会发现ContextSwitchDeadlock已启用.如果禁用此功能,当项目需要很长时间处理时,VS将不再警告您.在某些情况下,您可能有效地进行长时间运行.如果您正在进行调试并且在处理过程中已停止运行,那么它也会很有帮助 - 您不希望它在您有机会深入研究之前抱怨.


`ctrl-alt-e`带来异常对话框.
在VS 2013中使用`Debug - > Windows - > Exceptions Settings`导航.然后使用搜索
对吧!谢谢.我必须转到自定义并将"例外"添加到"调试"菜单.不是UI最直观的方面.按Tools/Customize,然后重新排列命令(按钮),然后从右上角的下拉菜单中选择Debug,然后选择Add(按钮).呼!
@ B.ClayShannon - ContextSwitchDeadlock特定于调试器.exe的发行版本不会显示此消息.

2> Spence..:

正如Pedro所说,如果您正在逐步执行代码,那么调试器会出现问题,从而阻止了消息泵.

但是,如果要在UI线程上执行长时间运行的操作,则调用Application.DoEvents(),它显式地对消息队列进行泵送,然后将控制权返回给当前方法.

但是,如果您这样做,我建议您查看您的设计,以便您可以从UI线程执行处理,以便您的UI保持良好和快速.



3> Rob Walker..:

听起来你在应用程序的主UI线程上这样做.UI线程负责在到达时抽取窗口消息,但由于您的数据库调用阻止了它,因此无法执行此操作.这可能会导致系统范围的消息出现问题.

你应该看看为长时间运行的操作产生一个后台线程,并为用户提供某种"我很忙"的对话框.



4> 小智..:

如果您不想禁用此异常,则只需让应用程序每60秒至少抽一次消息.它将防止发生此异常.尝试偶尔调用System.Threading.Thread.CurrentThread.Join(10).还有其他一些电话可以让消息消失.



5> Hassan Rahma..:

在Visual Studio 2017中,通过以下方式取消选中ContextSwitchDeadlock选项:

调试> Windows>例外设置

在“异常设置Windows”中:取消选中ContextSwitchDeadlock选项

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有