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.

呼び出し自体が async を作成します: HttpWebRequest (.NET) を非同期的に使用する方法、したがって、CPU を集中的に使用する操作はこのすべてに関与しません。

これは当然、コードのわずかな再構築につながりますが、これは進むべき道です。

于 2013-11-07T07:44:28.237 に答える