2010-04-12 130 views
7

目前,我正在做这样的:有没有更好的方法来计算消息队列(MSMQ)中的消息?

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

但出于显而易见的原因,它只是感觉不对 - 我不应该通过各种消息迭代只是为了获得一算,我应该?

有没有更好的方法?

回答

4

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

有些方法可以使用WMI或COM来完成此操作 - 查看MSMQManagement com组件。这有一个MessageCount属性。


我发现下面的职位,可能会给你的稍微好一点的纯C#实现一些其他的想法:

Counting Messages in an MSMQ MessageQueue from C#

虽然上面似乎是所有真实的,我要指出,我我从来没有试图用MSMQ来做这件事 - 我只是从队列中完成标准阅读。

-2

从消息队列获取计数的最好办法是

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

当队列超过10k条消息时,这种技术的性能非常糟糕。 – 2012-05-09 00:15:12

+1

此外,如果队列中的消息太多,它可能会抛出OutOfMemoryException。 – Ivan 2014-06-04 09:25:44

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

相关问题