1

各 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()) されます。

4

2 に答える 2

1

私は専門家ではありませんが、バッチ処理を試すことができると思います - http://msdn.microsoft.com/en-us/library/ms788973.aspx

于 2013-09-19T14:45:38.120 に答える
0

このブログでは、複数の「QueuePeekCompleted」イベント ハンドラーの作成について説明します。それは私のために働いた。

http://code-ronin.blogspot.com/2008/09/msmq-transactional-message-processing.html

于 2014-01-08T16:51:21.963 に答える