【问题标题】:Is there a better way to count the messages in an Message Queue (MSMQ)? [duplicate]有没有更好的方法来计算消息队列 (MSMQ) 中的消息? [复制]
【发布时间】:2011-02-06 19:59:29
【问题描述】:

我目前正在这样做:

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

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

有没有更好的办法?

【问题讨论】:

    标签: c# performance msmq


    【解决方案1】:

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

    有一些方法可以使用 WMI 或 COM 来实现 - 查看MSMQManagement com 组件。这有一个 MessageCount 属性。


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

    Counting Messages in an MSMQ MessageQueue from C#

    虽然以上似乎都是正确的,但我应该注意,我从未尝试使用 MSMQ 执行此操作 - 我只是从队列中进行标准读取。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 当队列超过 10k 条消息时,这种技术的性能很糟糕。
      • 此外,如果队列中的消息太多,它可能会抛出 OutOfMemoryException。
      【解决方案3】:
                  //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 类引用,只需浏览此地址即可。更多详情,您可以访问http://msdn.microsoft.com/en-us/library/ms711378%28VS.85%29.aspx

      【讨论】:

        猜你喜欢
        • 2013-06-07
        • 2011-04-21
        • 2011-07-12
        • 1970-01-01
        • 2016-08-08
        • 2012-12-28
        • 2011-07-08
        • 2012-03-27
        相关资源
        最近更新 更多