各 msmq msg は sql ステートメントのデータであるため、アプリケーション (C# アプリケーション) で並列スレッドを使用できません。
C# アプリケーションは、 msmq 内のメッセージを消費してから処理します。
サーバーの電源が切れたときのデータ損失を防ぐために、msg.Recoverable=true を使用しています。現在、これはトランザクション メッセージです。
msmq メッセージ (SQL ステートメント) は、シーケンス (FIFO) で順番に処理する必要があります。
複数のスレッドを使用して消費することは、どのスレッドがどのSQLステートメントを消費して実行するかを制御できないため、ノーノーです。
現在、490 KB の msmq メッセージの Receive() の速度は約 0.016 ~ 0.032 秒で、約 30 ~ 50 Tx/秒になり、これは受け入れられません。
現在、MSMQ 受信がアプリケーション全体のボトルネックになっています。
サーバーは Windows Server 2008 R2 上にあります
アプリケーションは、リモートではなく、ローカル サーバー MSMQ から取得 (Receive()) されます。