VB.Net多个后台工作者导致高CPU使用率

时间:2016-08-31 23:07:17

标签: vb.net multithreading backgroundworker

我有一个有两个后台工作者的VB.Net应用程序。第一个连接到设备并从中读取连续的数据流到结构中。这运行并占用大约2%的CPU。

有时新信息不完整,所以我有另一个后台工作者,它位于一个循环中,等待一个全局变量为null以外的任何东西。当我希望它查找缺少的信息时,设置此变量。

当两者都在运行时CPU利用率达到CPU的30-50%。

我认为将查找卸载到自己的线程是一个很好的举动,因为查找过程可能会阻塞(它正在查询网址),这样可以避免第一个后台工作者因为需要读取传入的数据而卡住即时的。但是,仅仅注释掉worker 2中的代码,只留下如下所示的Loop仍然会产生相同的高CPU。

Do While lookupRunning = True
            If lookup <> "" Then

            ' Query a URL and get data
            End If
Loop

问题显然是我在worker 2上运行了一个无限循环。除了转储这个想法并在Web服务无法响应的情况下以非常短的超时查找主线程上的信息,放入Application。我的循环中的DoEvents似乎没有太大的区别,似乎在任何情况下都不赞成。

有更好的方法吗?

0 个答案:

没有答案