gpt4 book ai didi

c# - Visual Studio : ContextSwitchDeadlock

转载 作者:IT王子 更新时间:2023-10-29 03:31:31 26 4
gpt4 key购买 nike

我一直收到无法解决的错误消息。它源自 Visual Studio 或调试器。我不确定最终的错误情况是在 VS、调试器、我的程序还是数据库中。

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

来自 VS 的第一条消息是一个弹出框,上面写着:“没有为任何调用堆栈框架加载符号。无法显示源代码。”单击后,我得到:“检测到 ContextSwitchDeadlock”,以及下面复制的一条长消息。

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

错误似乎与程序运行的时间长短有关(即 60 秒后),而不是发现错误的数量。我不认为这是一个内存问题。循环内没有声明变量。唯一创建的对象是 SqlDataReaders,它们位于 Using 结构中。添加 System.GC.Collect() 没有效果。

数据库是同一台笔记本电脑上的 SqlServer 站点。

表单上没有花哨的小玩意或小工具。

我不知道这个过程中有什么与我之前做过几十次的有很大不同。我以前见过这个错误,但从来没有看到过。

任何想法,任何人?

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

最佳答案

ContextSwitchDeadlock 并不一定意味着您的代码有问题,只是有可能。如果转到菜单中的 Debug > Exceptions 并展开 Managed Debugging Assistants,您会发现 ContextSwitchDeadlock 已启用。

如果禁用此选项,VS 将不再在项目处理时间过长时发出警告。在某些情况下,您可能有一个长时间运行的操作。如果您正在调试并在处理过程中停在一条线上,这也很有帮助 - 您不希望它在您有机会深入研究问题之前提示。

关于c# - Visual Studio : ContextSwitchDeadlock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/578357/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com