TickZoom è un'app ad alte prestazioni che utilizza la propria libreria di parallelizzazione e più thread O/S per l'utilizzo uniforme dei computer multi-core.Scrittura su un file log4net FileAppender con più problemi di prestazioni dei thread
L'app ha un collo di bottiglia in cui gli utenti devono scrivere informazioni su LogAppender da thread O/S separati.
FileAppender utilizza la funzionalità MinimalLock in modo che ogni thread possa bloccare e scrivere sul file e quindi rilasciarlo per il thread successivo da scrivere.
Se MinimalLock viene disabilitato, log4net segnala errori sul file che è già stato bloccato da un altro processo (thread).
Un modo migliore per fare log4net è quello di avere un singolo thread che si occupa di scrivere su FileAppender e qualsiasi altro thread aggiunge semplicemente i loro messaggi a una coda.
In questo modo, MinimalLock potrebbe essere disabilitato per migliorare notevolmente le prestazioni della registrazione.
Inoltre, l'applicazione fa un sacco di lavoro intensivo della CPU, quindi migliorerà anche le prestazioni per utilizzare un thread separato per scrivere sul file, in modo che la CPU non aspetti mai l'I/O per il completamento.
Quindi la domanda è: log4net offre già questa funzione? In tal caso, come si abilita la scrittura in thread su un file? C'è un altro appender più avanzato, forse?
In caso contrario, poiché log4net è già incluso nella piattaforma, è possibile implementare un thread e una coda separati per questo scopo nel codice TickZoom.
Cordiali saluti, Wayne
EDIT:
Grazie a quanto pare le risposte indicano sviluppare la nostra soluzione come forse un'estensione log4net in qualche modo. E mostrano chiaramente che log4net non fa questo tipo di cose.
Inoltre, abbiamo appena realizzato che potremmo "abusare" del sistema di registrazione che è principalmente inteso per messaggi leggibili dall'uomo per la notifica di eventi importanti o informazioni di debug. Questa particolare parte dell'output del software viene utilizzata solo per strumenti automatici che verificano l'accuratezza del sistema.
Naturalmente, utilizziamo anche log4net nei modi "normali" per il debug, gli avvisi e così via.
Ma questi sono più simili ai "registri delle transazioni" di quelli di debug o di notifica degli utenti. Più specificamente, non è necessario che questi registri siano direttamente leggibili dall'uomo. Se necessario un "visualizzatore" di qualche tipo può mostrare il contenuto in forma ASCII.
Quindi pianificheremo di fare in modo che questi log del tipo di transazione vengano scritti su una memoria binaria ad alta velocità.
Grazie, sembra che entrambe le risposte di seguito siano state grandi spinte per lo sviluppo della nostra soluzione.
Grazie per aver chiarito che non è possibile in log4net e dare il nudge verso una soluzione interna. – Wayne