none
通信処理について RRS feed

  • 質問

  • 開発ソフト:Visual Stadio 2013 pro
    OS:Windows 7 home premium 32ビット
    CPU: intel(R) Pentium(R) CPU G3250 @ 3.20GHz 3.20GHz
    メモリ:4.00GB

    他の機械とTCPで、通信処理を作成しております。
    作り方としては、スレッド処理にRead処理とWrite処理をフラグで分けて
    単純に通信処理を行っております。

    作り方に関して、スレッドで通信処理を行う仕組みが正しいのか
    初めて通信処理を作成する者でして、ご教授いただけないでしょうか

    2016年10月14日 0:30

すべての返信

  • 情報が足りません。

    通信に関しては、使用する.NET Frameworkが4.5以降かどうかで話が変わります。また、「他の機械」が1台なのか数台なのか多数なのかでも変わります(数千台に対してそれぞれスレッドを作っていてはオーバーヘッドが大きすぎます)。通信の最中にアプリケーションはどうしたいのか(GUIアプリケーションであれば通信中にも画面更新したいでしょう)、というわけでアプリケーションのタイプはGIUなのかCUIなのかサービスなのか。

    この辺りで処理方法が変わってきます。

    2016年10月14日 2:14
  • 返信ありがとうございます。

    GUIで、スレッドはBackgroundworkerを利用しています。

    簡単にあらわすと

    thread{

    read処理

    write処理

    }

    上記処理のように、スレッド内にReadとWrite処理を作っています。
    常にReadして、リアルタイム情報がほしいので上記処理をしているのですが
    スレッドで処理するのは処理として良いものかで、ご教授いただければと思っております。

    2016年10月14日 4:55
  • 情報が足りません。

    通信に関しては、使用する.NET Frameworkが4.5以降かどうかで話が変わります。また、「他の機械」が1台なのか数台なのか多数なのかでも変わります(数千台に対してそれぞれスレッドを作っていてはオーバーヘッドが大きすぎます)。
    2016年10月14日 5:54
  • 使用する.NET Framework:4.5

    他の機械は1台です。

    2016年10月14日 6:15
  • .NET 4.5を使用するのであれば、非同期機能が使えます。

    この非同期機能を使うと、スレッドは特に意識する必要はなくなります。通信処理中は他のGUI操作を行うことができ、通信完了後にソースコードの次の行に戻ってきます。

    ですので、スレッドやBackgroundWorkerは使用せず、非同期機能をお勧めします。

    • 回答の候補に設定 星 睦美 2016年11月25日 1:38
    2016年10月14日 6:40
  • GUI表示中、常に通信を行って、情報を更新するようなアプリでしょうか。

    通信した結果を使用するのが1つの画面で良いのであれば、async-awitや、BackgroundWorkerで良いと思います。
    async-awaitとBackgroundWorkerのどちらかは、メンバー内でメンテナンスしやすい方を採用しては如何でしょうか。

    ただ、複数の画面で通信したデータを使用するのであれば、MVCやMVVMでのModel層で通信することになります。
    この場合は、Threadをラップして通信処理をまとめたクラスを作成するのが良いと思います。

    .NETの非同期処理について違いを知りたい場合は、下記の書籍が参考になります。
      C#によるマルチコアのための非同期/並列処理プログラミング

    • 編集済み Gothelauth 2016年10月15日 1:34 末尾の改行を削除
    • 回答の候補に設定 星 睦美 2016年11月25日 1:38
    2016年10月15日 1:30