サーバーアプリケーションがフレームごとにビデオを受信するC#システムがあり、その責任はこのフレームを接続されているすべてのクライアントに送信することです。フレームをダウンロードして保存するスレッドがあります。そして、他のクライアント接続スレッドは、これらの格納されたフレームを読み取り、クライアントに送信します。今、私の疑問は、マルチスレッド環境のフレームを保存する最良の方法はどれかということです。
私は2つのアプローチを計画しました。1 つは Queue クラスを使用し、ロックでラップして enque-deque を使用することです。もう 1 つのアプローチは、フレームをファイルにダンプすることです。このファイルは、すべての読み取りおよび書き込みスレッドによって共有モードで開かれます。どちらがよりパフォーマンス指向になりますか? これを行うための他のより良い方法はありますか?
上記の 2 つのアプローチに対する私の仮定の一部を以下に示します。1) キューをロックするとパフォーマンスが低下する可能性があります。2) ファイルは共有モードで開かれ、個別のファイル ポインタを持つため、ファイル IO をロックする必要はありません。3) キュー アプローチの場合、RAM のメモリ制限を管理するためにキューの長さを定義する必要があります。これらのメモリ制限の制約には、キューのオーバーフローなどの他の状況を管理するためのテクティクスがさらに必要です。3) キューから複数のクライアントに同じフレームを送信するには、deque の変更を探す必要があります。4) ファイル IO は、キュー管理よりも遅くなります。
PS メモリ マップト ファイル IO は、私のシナリオでより多くのパフォーマンスを達成するのに役立ちますか?
あらゆる種類の長所/短所/コメントを提供してください。ありがとう。