1

私は、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枚以上になるので、プログラムはできるだけ軽くしたいと思っています。

どうもありがとうございました!コメントやアイデアは大歓迎です!

4

2 に答える 2

1
  1. 20 スレッドを開始するのが最善の策です。(または、ラルフが言ったように、必要に応じてスレッドを使用してください。特定のケースでは、おそらくある時点で20になります)。ほとんどのデータベースはスレッド セーフです。つまり、別のスレッドから書き込むことができます。「実際の」データベースを使用している場合、これはまったく問題になりません。
  2. いいえ、メイン スレッドでタイマーを使用して UI を更新します。UI は DB から簡単に読み取ることができます。更新アクション自体に時間がかからない限り、UI スレッドで実行しても問題ありません。
于 2013-11-15T07:59:04.587 に答える
0

1) 必要に応じてスレッドを使用しない理由。彼らが構築した 1 つの DBMS を使用して、大量の情報を処理できます。

2) UI スレッドのサービスを開始するという意味がわからない。1) と同様に、データベース管理システムはデータを処理するように構築されています。

于 2013-11-15T07:57:30.627 に答える