デニズェンスのスタックオーバーフロー私はあなたの知識が必要です。私はWPFと基本的なC#.NETソケット通信を利用したビデオ処理システムに取り組んでいます。各クライアントは、毎秒30フレームのビデオデータをLAN環境を介してサーバーに送信して処理します。処理の一部は、サーバー負荷を軽減するために各クライアントによって処理されます。スレッド通信とオブジェクトオーバーヘッド
私は、ハードウェアの制限が一度も懸念されていない環境でプログラミングを学びました。ビデオはそれを変えます.. "こんにちはワールド"は、私がこれを最小限に抑えるために私を準備していませんでした。これらの2つの将来の方法のいずれかの実施は深刻な問題ではない。私が時間とエネルギーを捧げるべきかどうかの判断は、私が援助を必要とする場所です。 (!しかし、提案を開いて)
私は2つのオプションがあり、ハードウェアを想定しては、可能な限りリアルタイム結果に近い生産からクライアントを制限します。
--Queued Client-- クライアントは、ビデオフレームのキューを処理します。各フレームは処理され、さらに解析するためにTCPパケットを介してサーバーに送信されます。このシステムは、センサキャプチャの順番で一度に1つのフレームのみを処理し、静的ソケットクライアントを介してサーバに送信します。 *このシステムは、最新のマルチコアハードウェアを利用できません。
- スレッドクライアント クライアントは、スレッド化された(バックグラウンドワーカー)処理と各フレームのサーバーへの送信を利用します。各新しいフレームは、新しい処理スレッドと、新しいネットワーク通信クラスのインスタンス生成をトリガします。 *このシステムは最新のハードウェアを使用していますが、タイミングの問題が深刻な場合があります。
私のお問い合わせの心に、スレッド通信はほとんど順序付け通信を生成しますか?私はすでに、サーバー側のクライアント間でビデオフレームを同期する予定です...しかし、新しい問題を作成するためには、データの配信は今のところ順調に進んでいませんか?これがローカルネットワークを介した通信であることを思い出してください。
新しいソケット通信クラスと新しい(シンプルな)ビデオ処理クラスをインスタンス化すると、各フレームを並行してキューに入れたり処理したりしないでください。
コードはちょうど形を取っています。クライアントシステムのハードウェアは不明であるため、そのパフォーマンスを判断することはできません。どのように開発を進めますか?
私は大学生です。そのような入力は私の知識の私の実際の世界のアプリケーションの設計に私を助ける。
お読みください:http://msdn.microsoft.com/en-us/library/ff963548.aspxには、あなたのケースに関する情報が満載です。あなたの場合、パラリスは完全に合理的です。イメージのアップロードとソースからの取得にはかなりの時間がかかりますので、これらのタスクを独立したコンテキスト(スレッド)で完全にオフロードできます。与えられたリンクを読み、あなたのケースでは同期のために素晴らしいプロデューサー/コンシューマーコレクションを探します。 – Polity
パイプライニングは良いサウンドで、同じような順序の実行時間を持つステージの場合はそうです。残念なことに、ビデオのストリーミングと処理には、しばしばCPU負荷の面で支配的な段階があります。これは効果的なボトルネックです。パイプの狭い部分です。この段階で複数の細いパイプを使用できる場合を除き、余裕のある細いパイプがあるにもかかわらず、ストリームは押さえつけられます。 –