TickZoom est une application très performante qui utilise sa propre bibliothèque de parallélisation et plusieurs threads O/S pour une utilisation en douceur des ordinateurs multicœurs.Ecriture dans un fichier log4net FileAppender avec plusieurs problèmes de performances
L'application rencontre un goulot d'étranglement où les utilisateurs doivent écrire des informations dans un LogAppender à partir de threads O/S séparés.
FileAppender utilise la fonction MinimalLock afin que chaque thread puisse verrouiller et écrire dans le fichier, puis le relâcher pour que le prochain thread écrive.
Si MinimalLock est désactivé, log4net signale des erreurs sur le fichier étant déjà verrouillé par un autre processus (thread).
Une meilleure façon pour log4net de le faire serait d'avoir un seul thread qui prend soin d'écrire dans FileAppender et tous les autres threads simplement ajouter leurs messages à une file d'attente. De cette manière, MinimalLock peut être désactivé pour améliorer considérablement les performances de la journalisation.
De plus, l'application effectue beaucoup de travail intensif sur le processeur, améliorant ainsi les performances pour utiliser un thread séparé pour l'écriture dans le fichier afin que le processeur n'attende jamais la fin de l'E/S. Donc, la question est, est-ce que log4net offre déjà cette fonctionnalité? Si oui, comment faites-vous activer l'écriture par thread dans un fichier? Y a-t-il un autre appender plus avancé, peut-être? Si ce n'est pas le cas, puisque log4net est déjà encapsulé dans la plate-forme, cela permet d'implémenter un thread séparé et une file d'attente à cet effet dans le code TickZoom.
Sincèrement, Wayne
EDIT:
Merci il semble que les réponses pointent à développer notre propre solution comme peut-être une extension log4net d'une certaine façon. Et ils montrent clairement que log4net ne fait pas ce genre de chose. En outre, nous venons juste de réaliser que nous pourrions abuser du système de journalisation qui est principalement destiné aux messages lisibles par l'homme pour notifier des événements importants ou des informations de débogage. Cette partie particulière de la sortie du logiciel n'est réellement utilisée que pour les outils automatisés qui vérifient la précision du système.
Bien sûr, nous utilisons également log4net de manière "normale" pour le débogage, les avertissements, etc. Mais elles ressemblent plus à des "journaux de transactions" qu'aux journaux de notification de débogage ou d'utilisateur. Plus spécifiquement, il n'est pas nécessaire que ces journaux soient directement lisibles par l'homme. Si nécessaire, un "spectateur" peut afficher le contenu sous forme ASCII. Nous allons donc faire en sorte que ces journaux de type transaction soient écrits dans un stockage binaire à grande vitesse.
Merci, il semble que les deux réponses ci-dessous ont été très utiles pour développer notre propre solution. Log4net ne supporte pas le scénario exact que vous décrivez.
Merci de préciser que ce n'est pas possible dans log4net et de donner le coup de pouce vers une solution interne. – Wayne