2010-04-12 9 views
7

मैं वर्तमान में ऐसा कर रहा हूं:क्या संदेश कतार (एमएसएमक्यू) में संदेशों को गिनने का कोई बेहतर तरीका है?

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

लेकिन स्पष्ट कारणों से, यह गलत लगता है - मुझे गिनती पाने के लिए हर संदेश के माध्यम से फिर से शुरू नहीं करना चाहिए, क्या मुझे चाहिए?

क्या कोई बेहतर तरीका है?

उत्तर

4

सी # में उत्तर नहीं दिखता है - आप जो कर रहे हैं वह ऐसा करने का एकमात्र तरीका है और अन्य सभी समान हैं।

डब्लूएमआई या COM का उपयोग करके ऐसा करने के तरीके हैं - MSMQManagement कॉम घटक पर एक नज़र डालें। इसमें एक संदेशकाउंट संपत्ति है।

Counting Messages in an MSMQ MessageQueue from C#

जबकि इसके बाद के संस्करण सभी सच्चे प्रतीत होता है, मुझे लगता है कि मैं ध्यान देना चाहिए:


मैं निम्नलिखित पोस्ट है कि आप थोड़ा बेहतर शुद्ध सी # कार्यान्वयन के लिए कुछ अन्य विचार दे सकते हैं पाया मैंने कभी भी एमएसएमक्यू के साथ ऐसा करने की कोशिश नहीं की है - मैंने कभी कतारों से मानक पढ़ाई की है।

-2

messageQueue से गणना प्राप्त करने का सबसे अच्छा तरीका

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

कतार 10k से अधिक संदेशों पर होने पर इस तकनीक का प्रदर्शन भयानक है। –

+1

इसके अलावा, अगर कतार में बहुत सारे संदेश हैं तो यह OutOfMemoryException को फेंक सकता है। – 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(); 

यह तेजी से आप एक का चयन किया है। आपको "सी: \ प्रोग्राम फ़ाइलें (x86) \ माइक्रोसॉफ्ट एसडीके \ विंडोज़" के अंदर एमएसएमक्यूमैनेजमेंट क्लास रेफरेंस मिलता है "बस इस पते में ब्राउज़ करें, आपको यह मिल जाएगा। अधिक जानकारी के लिए आप http://msdn.microsoft.com/en-us/library/ms711378%28VS.85%29.aspx पर जा सकते हैं।

संबंधित मुद्दे