C# 检测到ContextSwitchDeadlock

C# 检测到ContextSwitchDeadlock,c#,visual-studio,debugging,visual-studio-debugging,C#,Visual Studio,Debugging,Visual Studio Debugging,我正在调试模式下运行类似于以下代码的代码: for (int i = 0; i < 5000; i++) { for (int j = 0; j < 10; j++) { DoSomething(); } } for(int i=0;i

我正在调试模式下运行类似于以下代码的代码:

for (int i = 0; i < 5000; i++)
{
   for (int j = 0; j < 10; j++)
   {
     DoSomething();
   }
}
for(int i=0;i<5000;i++)
{
对于(int j=0;j<10;j++)
{
DoSomething();
}
}
我不时从VS2010中得到“检测到ContextSwitchDeadlock”。似乎可用RAM越少,性能越差。我有8GB,能够在大约8分钟内运行程序(循环完成后会有很多DB点击,所以8分钟不是循环时间),在4GB机器上,时间是原来的两倍!从我看到的情况来看,MDA被触发,因为我的循环运行时间超过60秒。本质上,这是一个警告,表明代码完全阻塞了应用程序

如何避免这些情况并提高速度


谢谢

如果您担心速度和性能,为什么不使用IEnumerator界面呢

您可以忽略该异常(我以前遇到过这种长时间运行的方法)

  • 按住
    ctrl+alt+e
  • 单击
    Find
  • 键入
    ContextSwitchDeadlock
    并按Enter键
  • 在表中取消选中抛出的
  • OK

  • 为了对提高速度进行评论,我们需要查看代码。该代码的字符数超过了允许的字符数,因此我不确定如何发布它。我的意思是,更多的代码实际上在“DoSomething()”中,要加速基本for循环,您可以做的不多,这是什么正在做的循环内,这需要时间。Payo在下面提供的链接是一个很好的建议,这项工作应该在一个单独的backgroundworker线程中完成。当您遍历一个大集合时,使用IEnumerator与foreach是否有真正的优势?是在foreach中调用Dispose()吗?我会试试看是否有什么不同。谢谢。问题是我应该吗?这是一个真正的情况,减慢或消耗内存,还是只是一个可以忽略的例外?如何确定问题出在哪里?这只是visual studio警告您,一个方法需要花费很长时间。它可以被忽略-忽略此异常不会影响您的程序,它只会影响您的调试体验。如果你的应用程序真的挂起了,你需要修复它。另一方面,如果您希望您的应用程序运行很长时间而不点击某些类型的“上下文切换”(例如控制台读/写、UI更新),那么您将希望忽略此异常。此外,这个问题的回答比我给出的更详细,这是答案吗!?!我是stackoverflow的新手,一个upvote和一个被接受的答案会给我一些新手分数:)我有一个没有UI的独立exe,这是我的问题的答案。