TickZoom ist eine sehr leistungsfähige App, die eine eigene Parallelisierungsbibliothek und mehrere O/S-Threads für die reibungslose Nutzung von Multicore-Computern verwendet.Schreiben in einen log4net FileAppender mit mehreren Thread-Leistungsproblemen
Die App löst einen Engpass, bei dem Benutzer Informationen aus separaten O/S-Threads in einen LogAppender schreiben müssen.
Der FileAppender verwendet die MinimalLock-Funktion, so dass jeder Thread sperren und in die Datei schreiben kann und sie dann für den nächsten zu schreibenden Thread freigeben kann.
Wenn MinimalLock deaktiviert wird, meldet log4net Fehler über die Datei, die bereits von einem anderen Prozess (Thread) gesperrt ist.
Ein besserer Weg für log4net, dies zu tun wäre, einen einzigen Thread zu haben, der sich um das Schreiben in den FileAppender kümmert, und alle anderen Threads fügen einfach ihre Nachrichten zu einer Warteschlange hinzu.
Auf diese Weise konnte MinimalLock deaktiviert werden, um die Leistung der Protokollierung erheblich zu verbessern.
Darüber hinaus führt die Anwendung eine Menge CPU-intensive Arbeit durch, so dass sie auch die Leistung verbessert, einen separaten Thread zum Schreiben in die Datei zu verwenden, so dass die CPU niemals auf die I/O wartet.
Die Frage ist also, bietet log4net diese Funktion bereits? Wenn ja, wie wird das Thread-Schreiben in eine Datei aktiviert? Gibt es vielleicht noch einen anderen, fortgeschritteneren Appender?
Wenn nicht, dann ist log4net bereits in der Plattform eingebunden, wodurch es möglich ist, einen separaten Thread und eine Warteschlange für diesen Zweck im TickZoom-Code zu implementieren.
Mit freundlichen Grüßen, Wayne
EDIT:
Dank es die Antworten auf irgendeine Weise log4net verweisen auf die Entwicklung unserer eigenen Lösung, wie vielleicht eine Erweiterung scheint. Und sie zeigen deutlich, dass log4net solche Dinge nicht macht.
Darüber hinaus haben wir gerade festgestellt, dass wir das Logging-System "missbrauchen" könnten, das hauptsächlich für lesbare Nachrichten gedacht ist, um wichtige Ereignisse oder Debugging-Informationen zu melden. Dieser spezielle Teil der Softwareausgabe wird nur für automatisierte Tools verwendet, die die Genauigkeit des Systems überprüfen.
Natürlich verwenden wir log4net auch auf "normale" Weise für Debugging, Warnungen und so.
Aber diese sind eher "Transaktionsprotokolle" als Debug oder Benutzer Benachrichtigungsprotokolle. Genauer gesagt ist es nicht notwendig, dass diese Protokolle direkt für Menschen lesbar sind. Bei Bedarf kann ein "Betrachter" den Inhalt in ASCII-Form anzeigen.
Also werden wir planen, diese Transaktion-Typ-Protokoll zu einem Hochgeschwindigkeits-Binärspeicher geschrieben werden.
Danke, es scheint, dass beide der Antworten unten große Anstöße waren, unsere eigene Lösung zu entwickeln.
Dank für die Klärung ist es in log4net nicht möglich und gibt den Anstoss zu einer Inhouse-Lösung. – Wayne