2010-04-12 23 views
7

actualmente estoy haciendo de esta manera:¿Hay una forma mejor de contar los mensajes en una cola de mensajes (MSMQ)?

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

Pero, por razones obvias, sólo se siente mal - Yo no debería tener que recorrer todos los mensajes sólo para obtener un recuento, debería?

¿Hay una manera mejor?

Respuesta

4

En C# la respuesta parece ser no, lo que está haciendo es una de las únicas formas de hacerlo y todas las demás son similares.

Hay formas de hacerlo usando WMI o COM: eche un vistazo al componente MSMQManagement com. Esto tiene una propiedad MessageCount.


me encontré con el siguiente post que puede darle algunas otras ideas para C# implementaciones ligeramente mejores puros:

Counting Messages in an MSMQ MessageQueue from C#

Si bien lo anterior parece que todo es verdad, debo señalar que me Nunca he intentado hacer esto con MSMQ; solo he hecho lecturas estándar de las colas.

-2

La mejor manera de obtener el recuento de MessageQueue es

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

El rendimiento de esta técnica es terrible cuando la cola tiene más de 10k mensajes. –

+1

Además, podría arrojar OutOfMemoryException si hay demasiados mensajes en la cola. – 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(); 

Esto es más rápido que ha seleccionado uno. Obtiene refferencia de clase MSMQManagement dentro de "C: \ Archivos de programa (x86) \ Microsoft SDKs \ Windows" simplemente navegue en esta dirección, la obtendrá. para más detalles, puede visitar http://msdn.microsoft.com/en-us/library/ms711378%28VS.85%29.aspx.

Cuestiones relacionadas