0

我正在开发一个调用 Web 服务的应用程序,它从数据库中删除信息(该 Web 服务是由第三方供应商开发的)。在第一次运行时,大约有 100,000 条记录被删除。

我已经测试了几次例程,这偶尔会出现在 Visual Studio 中:

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

我假设 Web 服务需要 60 多秒才能将控制权传递回 .NET Forms 应用程序。请参阅消息中的以下引用:“为避免此问题,所有单线程单元 (STA) 线程应使用泵送等待原语(例如 CoWaitForMultipleHandles)并在长时间运行的操作期间定期泵送消息”。由于这是一个 Windows 窗体应用程序,这是否意味着我不需要为此做任何事情?

4

2 回答 2

2

有时,由于服务器名称错误,也可能会出现此问题,例如,如果您包含SERVER/SQLEXPRESS而不是SERVER\SQLEXPRESS然后显示此错误,这是我的情况。

于 2014-11-25T11:12:54.687 回答
0

检查并确保您使用的阅读器没有包含 try/catch。您应该努力尝试并比这更好地解决您的解决方案问题。try/catch 将导致超时,尤其是在 while 循环中。

于 2016-03-29T02:18:03.430 回答