0

我有 ac#winform 桌面应用程序。它通过调用我的 [web 方法] 检查我的服务器上的消息。

由于我正在开发中,因此我的测试客户端并不总是可以使用此 [web 方法]。

尽管如此,客户端仍在调用此 [web 方法]。

我注意到在这种情况下(在我的 PC 版本上)CPU 使用率达到 25%。

目前我的 [web 方法] 在我的客户端上while(true)循环调用。随后,[web 方法] 被递归调用。

此 while 循环已由一个新线程启动。

我有 ac#winform 桌面应用程序。它通过调用我的 [web 方法] 检查我的服务器上的消息。

由于我正在开发中,因此我的测试客户端并不总是可以使用此 [web 方法]。

尽管如此,客户端仍在调用此 [web 方法]。

我注意到在这种情况下(在我的 PC 版本上)CPU 使用率达到 25%。

目前,我的 [web 方法] 在 While(true) 循环中在我的客户端上调用。随后,[web 方法] 被递归调用。

此 while 循环已由一个新线程启动。

Thread _th = new Thread(MyLoop);
_th.Start();


void MyLoop()
{
  while (true)
  {
    if (Disconnect)
    {
      return;
    }
    string[] _requests = Shared.WSconnector.GetRequests(Shared.ActiveMac);
    //do something with these server requests...
  }
}

虽然我的 Web 服务的中断希望是最小的,但它显然仍然会发生。

我如何保护我的客户免受这种 CPU 增加的影响?

谢谢

虽然我的 Web 服务的中断希望是最小的,但它显然仍然会发生。

我如何保护我的客户免受这种 CPU 增加的影响?

4

1 回答 1

4

不要while(...)循环调用 Web 客户端,而是使用System.Timers.Timer.

调用本身 make async: How to use HttpWebRequest (.NET) asynchronously,所以这一切都不会涉及任何 CPU 密集型操作。

这自然会导致对代码进行轻微的重新架构,但这是一种方法。

于 2013-11-07T07:44:28.237 回答