■ 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