7
votes

Existe-t-il un meilleur moyen de compter les messages dans une file d'attente de message (MSMQ)?

Je le fais actuellement comme ceci:

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


0 commentaires

3 Réponses :


4
votes

en C # La réponse semble être non - ce que vous faites est l'un des seuls moyens de faire cela et de tous les autres sont similaires.

Il existe des moyens de faire cela à l'aide de WMI ou de consulter le MSMQManagement Composant COM. Cela a une propriété Messagecount.


J'ai trouvé le message suivant qui peut vous donner d'autres idées pour une légère meilleure implémentation C # pure C #:

Comptage de messages dans une msmq messagequeuse de C #

Bien que ce qui précède semble être tout vrai, je dois noter que je n'ai jamais essayé de le faire avec MSMQ - je n'ai jamais fait la lecture standard des files d'attente.


0 commentaires

-2
votes

Le meilleur moyen d'obtenir le comptage à partir de MessageQUE est

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


2 commentaires

Les performances de cette technique sont terribles lorsque la file d'attente est de plus de 10 000 messages.


En outre, cela pourrait lancer une exception exceptionnelle s'il y a trop de messages dans la file d'attente.



1
votes
            //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();
This is faster than you selected one.
You get MSMQManagement class refferance inside "C:\Program Files (x86)\Microsoft SDKs\Windows" just browse in this address you will get it. for more details you can visit  http://msdn.microsoft.com/en-us/library/ms711378%28VS.85%29.aspx. 

0 commentaires