我目前正在这样做:
MessageQueue queue = new MessageQueue(".\Private$\myqueue");
MessageEnumerator messageEnumerator = queue.GetMessageEnumerator2();
int i = 0;
while (messageEnumerator.MoveNext())
{
i++;
}
return i;
但是出于显而易见的原因,它只是感觉不对 - 我不应该遍历每条消息只是为了得到一个计数,我应该吗?
有更好的方法吗?
答案 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();