私は、20 の小さなコンピューター ボードと通信する必要があるプロジェクトを行っています。私は彼らの接続をチェックし続ける必要があり、彼らは私にいくつかのデータを返します. そこで私の目標は、これらのボードの制御/監視システムを構築することです。
Visual Studio 2010 と C# WPF を使用します。
私のアイデア/計画は次のようになります。
メインスレッドで:
コントロール ウィンドウは 1 つしかないため、主に表示されるデータを更新するためのメイン スレッドが作成されます。各ボードのデータは、1 秒間隔で表示および更新されます。データのソースは、メイン スレッドが最新のデータを検索するデータベースから取得されます (どの種類のデータベースを使用するかはまだ決めていません)。
コントロールウィンドウにもコントロールボタンがあります。私は既に .dll ライブラリを持っているので、内部の関数を呼び出してボードにアクションを指示するだけです (別のスレッドを開始することによって)。
次の 2 つのサービスがあります。
(タイマーサービス) 1つは、特定の時間にボードをオン/オフするスケジュールされたタイマーです。ユーザーはオン/オフ時間を変更できます。オン/オフ時間を取得するためにデータベースから読み取ります。
(接続サービス) 別の 1 人が、30 秒以内に理事会に情報/ステータスを尋ねて受け取る責任があります。作業には、インターネットを介してボードに接続し、データを要求し、データを受信し、データベースにデータを書き込むことが含まれます。また、インターネット接続が失敗した場合にスローされる例外を書き留めます。
私の質問:
1) 接続サービスについては、ボードへの接続ごとに 1 つのスレッドで、これを行うために 20 のスレッドを開始する必要があるかどうか疑問に思っています。接続が 1 つのスレッドのみによって行われた場合、次のボード接続は最初の接続が完了するまで待機する必要があるため、プロセス全体が終了するまでに最大 1 ~ 2 分かかる場合があります。そのため、すべてのデータを元に戻すには約 20 ~ 40 分かかります。しかし、接続を 20 スレッドに分離すると、パフォーマンスに大きな違いが生じるでしょうか? 20 個のスレッドが死ぬことはないため、可能であれば 30 秒ごとにデータを要求し続けます。さらに、20 個のスレッドが同時に書き込みを行うとデータベースが衝突するため、20 個のデータベースが必要になるということですか?
2) 1 秒ごとにメイン スレッド上のデータの表示を更新するには、これを行うサービスも開始する必要がありますか? また、接続サービスも同じデータベースにアクセスしているため、データベースが衝突しますか?
今後、制御・監視するボードは100枚以上になるので、プログラムはできるだけ軽くしたいと思っています。
どうもありがとうございました!コメントやアイデアは大歓迎です!