Melhore o desempenho da leitura do log de eventos [duplicado]

Esta questão já tem uma resposta aqui:

Qual é a maneira mais rápida de ler o log de eventos na máquina remota? 7 respostas

Eu sou log de eventos de consultas de controladores de domínio diferentes, eu tenho que continuar consultando isso depois de algum intervalo de tempo.

Abaixo está o código que estou usando para consultá-lo.

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("-----------------------------------------");
            }
        }

Na primeira vez que estou consultando um controlador de domínio, tenho que ler o log dos últimos 30 dias. Senão apenas lemos o último log da última vez que saímos. Está demorando muito tempo para consultá-lo? Eu tentei com o WMI, mesmo problema muito tempo e é por vezes dando "Invalid Query Error"? Como melhorar isso? Qualquer modelo que você sugerir para fazer essa tarefa, estou fazendo multithreading aqui para cada controlador de domínio?

obrigado

questionAnswers(2)

yourAnswerToTheQuestion