如何在不使用多个线程的情况下提高MSMQ Receive()的性能

时间:2013-09-19 14:03:54

标签: msmq

我无法在我的应用程序(C#Application)中使用并行线程,因为每个msmq msg都是sql语句的数据

C#Application消耗msmq中的消息,然后对其进行处理。

我正在使用msg.Recoverable = true,以防止服务器断电时数据丢失。 目前,这是交易消息。

必须按顺序(FIFO)按顺序处理msmq消息(sql语句)

使用多个线程消耗是一个禁忌,因为无法控制将使用哪个线程并执行哪个sql语句。

目前,msmq消息的490 KB的Receive()速度约为0.016 -0.032秒,大约为30-50 Tx / sec,这是不可接受的。

目前,MSMQ接收是整个应用程序的瓶颈

服务器位于Windows Server 2008 R2上

并且应用程序从本地服务器MSMQ获取(Receive()),而不是远程

2 个答案:

答案 0 :(得分:1)

我不是专家,但我认为您可以尝试使用批处理 - http://msdn.microsoft.com/en-us/library/ms788973.aspx

答案 1 :(得分:0)

此博客讨论了如何创建多个“QueuePeekCompleted”事件处理程序。它对我有用。

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