Verbesserte Leistung beim Lesen des Ereignisprotokolls [duplizieren]
Diese Frage hat hier bereits eine Antwort:
Was ist die schnellste Methode zum Lesen des Ereignisprotokolls auf einem Remotecomputer? 7 AntwortenIch frage Ereignisprotokoll von verschiedenen Domänencontrollern ab, das muss ich nach einiger Zeit immer wieder abfragen.
Unten ist der Code, den ich verwende, um ihn abzufragen.
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("-----------------------------------------");
}
}
Wenn ich zum ersten Mal einen Domänencontroller abfrage, muss ich das Protokoll der letzten 30 Tage lesen. Ansonsten lies einfach das letzte Protokoll von unserer letzten Abreise. Es braucht verdammt viel Zeit, um es abzufragen? Ich habe es mit WMI versucht, dasselbe Problem hat verdammt viel Zeit in Anspruch genommen und es wird irgendwann "Invalid Query Error" angezeigt? Wie kann man das verbessern? Gibt es ein Modell, das Sie für diese Aufgabe vorschlagen, ich mache hier Multithreading für jeden Domänencontroller?
Vielen Dank