2010-02-10 3 views
5

J'utilise EventLogReader pour interroger des serveurs 2008 distants pour des événements. La performance de l'interrogation des événements sur une machine distante est horrible (6/sec). Si j'interroge la même machine via WMI en utilisant un ManagementObjectSearch uniquement en avant, les performances sont excellentes (1000/sec). Je ne vois aucune option similaire sur le EventLogReader (par exemple ReturnImmediatly, Rewindable) pour l'accélérer. J'ai essayé d'éteindre le pare-feu sur le serveur distant pour voir s'il y avait des problèmes de communication, mais cela n'a pas fait de différence. Lorsque vous utilisez EventLogReader pour lire les journaux à partir de l'hôte local, les performances sont conformes aux attentes - c'est uniquement sur le réseau qu'il ralentit (mais WMI ne rencontre pas le problème).Performance à distance EventLogReader

Un moyen d'accélérer les performances d'EventLogReader sur le réseau?

Merci, Mitch

+0

Y a-t-il une raison particulière pour laquelle vous ne pouvez pas utiliser WMI? – Oded

+0

J'ai besoin d'obtenir les événements dans l'ordre croissant (EventLogReader le permet). WMI ne le redonne qu'en descendant. –

+0

qu'en est-il de l'utilisation de WMI pour les charger en mémoire, puis les trier? –

Répondre

4

a fait un peu d'essais (modifié le code de l'échantillon de http://msdn.microsoft.com/en-us/library/bb671200.aspx) et de mon expérimentation, je trouve que le succès de la performance vient d'appeler EventRecord.FormatDescription().

Lorsque j'avais seulement un appel à EventRecord.ToXml(), j'étais capable de tirer à distance à partir d'un serveur sur le LAN sur 4300 événements en 25 secondes à environ 170 événements/sec. Lorsque j'ai ajouté un appel à EventRecord.FormatDescription(), la performance a chuté à près de 1,5 minute pour lire les 4300+ événements et environ 52 événements/sec. Je m'excuse, ce n'est peut-être pas la réponse que vous voulez mais mon conseil serait que si vous n'avez pas besoin d'appeler EventRecord.FormatDescription() cela augmentera les performances.

+0

@Nate: merci d'avoir regardé cela. J'appelle FormatDescription que j'ai besoin d'appeler pour obtenir le message. Je me demande s'il y a une autre façon d'obtenir le message interpolé? Je vais devoir jouer avec ça. –

+0

J'ai trouvé que EventRecord.ToXML() ne sort que des messages du journal d'application, les journaux de sécurité semblent être construits à partir des propriétés du journal des événements, mais FormatDescription() semble le faire péniblement lent. J'envisage d'écrire le XPath complet pour les détails du journal de sécurité et de retomber sur FormatDescription si je n'ai pas de données XPath. – StrangeWill

+0

^Ignorer cela, c'était une idée stupide, je n'ai aucune idée comment compenser fondamentalement pour que FormatDescription soit stupidement lent. – StrangeWill