有没有更好的方法来计算消息队列(MSMQ)中的消息?

时间:2010-04-12 00:00:51

标签: c# performance msmq

我目前正在这样做:

MessageQueue queue = new MessageQueue(".\Private$\myqueue");
MessageEnumerator messageEnumerator = queue.GetMessageEnumerator2();
int i = 0;
while (messageEnumerator.MoveNext())
{
    i++;
}
return i;

但是出于显而易见的原因,它只是感觉不对 - 我不应该遍历每条消息只是为了得到一个计数,我应该吗?

有更好的方法吗?

3 个答案:

答案 0 :(得分:4)

在C#中,答案似乎是否定的 - 你正在做的是这样做的唯一方法之一,而其他所有方法都是相似的。

使用WMI或COM可以实现此目的 - 查看MSMQManagement com组件。这有一个MessageCount属性。


我发现以下帖子可能会为您提供一些其他更好的纯C#实现的想法:

Counting Messages in an MSMQ MessageQueue from C#

虽然上述情况似乎都是正确的,但我应该注意到我从未试图用MSMQ做到这一点 - 我只是从队列中做过标准阅读。

答案 1 :(得分:1)

            //here queue is msmq queue which you have to find count.        
            int index = 0;
            MSMQManagement msmq = new MSMQManagement() ;   
            object machine = queue.MachineName;
            object path = null;
            object formate=queue.FormatName;
            msmq.Init(ref machine, ref path,ref formate);
            long count = msmq.MessageCount();

这比你选择的要快。 您在“C:\ Program Files(x86)\ Microsoft SDKs \ Windows”中获得MSMQManagement类refferance,只需浏览此地址即可获得它。有关详细信息,请访问http://msdn.microsoft.com/en-us/library/ms711378%28VS.85%29.aspx

答案 2 :(得分:-2)

从messageQueue获取计数的最佳方法是

MessageQueue queue = new MessageQueue(".\Private$\myqueue");
int iCount = queue.GetAllMessages().count();