2010-04-12 21 views
7

Jestem obecnie robi to tak:Czy istnieje lepszy sposób liczenia wiadomości w kolejce wiadomości (MSMQ)?

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

Ale z oczywistych względów, po prostu czuje się źle - nie powinien mieć do iterację każdej wiadomości po to, żeby liczyć, powinienem?

Czy istnieje lepszy sposób?

Odpowiedz

4

W języku C# odpowiedź wydaje się być nie - to, co robisz, jest jednym z jedynych sposobów, aby to zrobić, a wszystkie inne są podobne.

Są sposoby na to, używając WMI lub COM - spójrz na komponent kom. MSMQManagement. Ma to właściwość MessageCount.


znalazłem następujące stanowiska, które mogą dać ci kilka innych pomysłów na nieco lepsze czystych C# implementacji:

Counting Messages in an MSMQ MessageQueue from C#

Chociaż powyższe wydaje się być wszystko prawda, powinien pamiętać, że Nigdy nie próbowałem tego robić z MSMQ - robiłem tylko standardowe czytanie z kolejek.

-2

Najlepszym sposobem, aby uzyskać zliczania od kolejka komunikatów jest

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

Wydajność tej techniki jest straszna, gdy kolejka przekracza 10 000 wiadomości. –

+1

Co więcej, może wyrzucić OutOfMemoryException, jeśli w kolejce jest za dużo wiadomości. – Ivan

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(); 

To szybciej niż wybrany jeden. Otrzymujesz odesłanie do klasy MSMQManagement w "C: \ Program Files (x86) \ Microsoft SDK \ Windows" po prostu przeglądaj ten adres, otrzymasz go. Aby uzyskać więcej informacji, odwiedź stronę http://msdn.microsoft.com/en-us/library/ms711378%28VS.85%29.aspx.

Powiązane problemy