【MSMQ】メッセージキュー ~ パフォーマンス向上するには ~

■ MSMQのパフォーマンス向上するには

 * BinaryMessageFormatterを使うといい

参考文献

http://msdn.microsoft.com/ja-jp/library/system.messaging.binarymessageformatter(v=vs.80).aspx
より抜粋

BinaryMessageFormatter のスループットは、XmlMessageFormatter のスループットよりも高速です。
疎結合されたメッセージ処理よりも速度を優先する場合は BinaryMessageFormatter を使用します。
http://msdn.microsoft.com/ja-jp/library/dd297659.aspx
より抜粋

Binary フォーマッタはデフォルトの XML フォーマッタよりも高速なので、
MSMQ を使った処理のパフォーマンスが問題になる場合には、
このフォーマッタの使用を検討する価値があります。

■ 補足:BinaryMessageFormatterについて

 * 画像ファイルなどのバイナリ・データを送受信したい時にも使える
http://www.atmarkit.co.jp/fdotnet/chushin/introwinform_05/introwinform_05_03.html

サンプル

public partial class Form1 : Form
{
    private List<DataItemContainer> dataItems;

    public Form1()
    {
        InitializeComponent();
    }
    
    private void button1_Click(object sender, EventArgs e)
    {
        var queue = new MessageQueue(@".\private$\msmq_sample");
        var message = new System.Messaging.Message(
            queue, new BinaryMessageFormatter());

        var container = new DataItemContainer
        {
            Item = "ID",
            Value = this.textBox1.Text,
        };

        message.Body = container;
        message.Label = this.textBox2.Text;
        queue.Send(message);

        this.label1.Text = "管理ツールからメッセージキューを確認してみて下さい";
    }

    private void button2_Click(object sender, EventArgs e)
    {
        var queue = new MessageQueue((@".\Private$\msmq_sample"));
        queue.Formatter = new BinaryMessageFormatter();
        var message = queue.Receive();

        string output = string.Empty;
        var container = message.Body as DataItemContainer;
        if (container != null)
        {
            output = container.Item
                    + " : " + container.Value + "\n";
        }
        else
        {
            output = "失敗";
        }

        this.label1.Text = 
            message.Label.ToString() + "\n" + output;
    }
}

[Serializable()]
public class DataItemContainer
{
    public string Item { get; set; }
    public string Value { get; set; }
}

関連記事

MSMQ

メッセージキュー ~ 基本編 ~
https://blogs.yahoo.co.jp/dk521123/29398213.html
メッセージキュー ~ 環境設定編 ~
https://blogs.yahoo.co.jp/dk521123/29372187.html
メッセージキュー に関するトラブルシューティング
https://blogs.yahoo.co.jp/dk521123/30137388.html