2010-04-12 125 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

相關問題