ContextSwitchDeadlock错误 - VS 2015

时间:2015-12-22 10:51:32

标签: c# visual-studio-2015

我正在创建一个类似功能的扩展,我们将其作为插件。

当我调试扩展,并打开VS的实验实例时,我得到了这个:

  

发生了ContextSwitchDeadlock   消息:托管调试助手'ContextSwitchDeadlock'在'C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ devenv.exe'中检测到问题。   附加信息:CLR无法从COM上下文0x1272878转换到COM上下文0x12727c0 60秒。   拥有目标上下文/公寓的线程很可能是在非抽空等待或处理非常长时间运行的操作而不抽取Windows消息。   这种情况通常会对性能产生负面影响,甚至可能导致应用程序变得无响应或内存使用量随时间不断累积。   为了避免这个问题,所有单线程单元(STA)线程都应该使用抽取等待原语(例如CoWaitForMultipleHandles)并在长时间运行操作期间定期泵送消息。

我读过这篇文章: Similar problem

并取消选中Exception Settings中的ContextSwitchDeadlock,但我对此感到不舒服。

然后我发现这篇文章(特别是Scott Munro的回答): Similar problem 2

并使用步骤进入Thread窗口,但在检查主线程时我只看到这个:

Main Thread     Microsoft.VisualStudio.CommonIDE.dll!Microsoft.VisualStudio.CommonIDE.ResourceLoader.FindResource.AnonymousMethod__0
[External Code] 

所以这对我没什么帮助。

如何解决ContextSwitchDeadlock?除了在MDA中简单地取消选中它。我还尝试在我的计算机上安装已发布的vsix(未上传到图库),但它使得VS挂在启动画面上。我认为它与整个问题有关。

这是主线程显示的内容(行列转换):

  

主线
  主线程Microsoft.VisualStudio.CommonID​​E.dll!Microsoft.VisualStudio.CommonID​​E.ResourceLoader.OpenAssemblyResourceManifest4
  正常

这就是抱怨的工作线程显示的内容:

  

工作线程   clr.dll!主题:: intermediateThreadProc()
  ntdll.dll!_NtWaitForSingleObject@12正常

我在callstack中看不到任何内容,或者找不到我的代码忙碌的内容。

0 个答案:

没有答案