Mejorar el rendimiento del registro de eventos de lectura [duplicado]

Esta pregunta ya tiene una respuesta aquí:

¿Cuál es la forma más rápida de leer el registro de eventos en una máquina remota? 7 respuestas

Soy el registro de sucesos de consultas de diferentes controladores de dominio, tengo que seguir consultando ese intervalo de tiempo.

Abajo está el código que estoy usando para consultarlo.

public static void FindAllLog(string machineName)
        {
            //EventLog log = new EventLog("", "");
            //log.
            EventLog[] remoteEventLogs;
            // Gets logs on the local computer, gives remote computer name to get the logs on the remote computer.
            remoteEventLogs = EventLog.GetEventLogs(machineName);
            Console.WriteLine("Number of logs on computer: " + remoteEventLogs.Length);

            for (int i = 0; i < remoteEventLogs.Length; i++)
            {
                Console.WriteLine("Log : " + remoteEventLogs[i].Log);
                ReadEventLog(machineName, remoteEventLogs[i].Log, DateTime.Now.AddDays(-30));
                //ReadAppEventLog(machineName, remoteEventLogs[i].Log);                
            }
        }

public static void ReadEventLog(string machine, string logType,DateTime fromDate)
        {
            EventLog ev = new EventLog(logType, machine);
            var entry = (from EventLogEntry e in ev.Entries
                         where e.TimeGenerated >= fromDate
                         orderby e.TimeGenerated
                         select e);//.LastOrDefault();
            foreach (EventLogEntry CurrentEntry in entry)
            {
                Console.WriteLine("Event ID : " + CurrentEntry.EventID);
                Console.WriteLine("Event Source : " + CurrentEntry.Source);
                Console.WriteLine("Event TimeGenerated : " + CurrentEntry.TimeGenerated);
                Console.WriteLine("Event TimeWritten : " + CurrentEntry.TimeWritten);
                Console.WriteLine("Event MachineName : " + CurrentEntry.MachineName);
                Console.WriteLine("Entry Type : " + CurrentEntry.EntryType.ToString());
                Console.WriteLine("Message :  " + CurrentEntry.Message + "\n");
                Console.WriteLine("-----------------------------------------");
            }
        }

La primera vez que estoy consultando un controlador de dominio, tengo que leer el registro de los últimos 30 días. Lo demás acaba de leer el último registro de la última vez que nos fuimos. ¿Te está costando mucho tiempo preguntarlo? Intenté con WMI, el mismo problema mucho tiempo y en algún momento se da "Error de consulta inválida"? ¿Cómo mejorar esto? Cualquier modelo que sugiera para hacer esta tarea, ¿estoy haciendo multiproceso aquí para cada controlador de dominio?

Gracias

Respuestas a la pregunta(2)

Su respuesta a la pregunta