TickZoom es una aplicación de muy alto rendimiento que usa su propia biblioteca de paralelización y múltiples subprocesos O/S para una utilización sin problemas de las computadoras multi-core.Escribiendo a log4net FileAppender con problemas de rendimiento de múltiples hilos
La aplicación golpea un cuello de botella donde los usuarios necesitan escribir información en un LogAppender desde hilos de O/S separados.
FileAppender utiliza la función MinimalLock para que cada subproceso se pueda bloquear y escribir en el archivo y luego soltarlo para que el siguiente subproceso escriba.
Si MinimalLock se deshabilita, log4net informa errores sobre el archivo que ya está bloqueado por otro proceso (subproceso).
Una mejor forma para que log4net haga esto sería tener un solo hilo que se encargue de escribir en FileAppender y cualquier otro hilo simplemente agrega sus mensajes a una cola.
De esta forma, MinimalLock podría desactivarse para mejorar en gran medida el rendimiento del registro.
Además, la aplicación hace un montón de trabajo intensivo de CPU, por lo que también mejorará el rendimiento al utilizar una secuencia separada para escribir en el archivo para que la CPU nunca espere en la E/S para completar.
Entonces, la pregunta es, ¿log4net ya ofrece esta característica? Si es así, ¿cómo habilita la escritura enhebrada en un archivo? ¿Hay otro appender más avanzado, tal vez?
De lo contrario, dado que log4net ya está envuelto en la plataforma, eso posibilita implementar un hilo y cola separados para este propósito en el código TickZoom.
Sinceramente, Wayne
EDIT:
Gracias Parece que la respuestas apuntan a desarrollar nuestra propia solución como tal vez una extensión de Log4net de alguna manera. Y muestran claramente que log4net no hace este tipo de cosas.
Además, nos dimos cuenta de que podríamos estar "abusando" del sistema de registro, que está principalmente destinado a mensajes legibles por humanos para notificar eventos importantes o información de depuración. Esta parte particular de la salida de software solo se usa realmente para herramientas automatizadas que verifican la precisión del sistema.
Por supuesto, también usamos log4net en las formas "normales" para la eliminación de errores, advertencias, y tal.
Pero estos son más como "registros de transacciones" que los registros de depuración o notificaciones de usuario. Más específicamente, no es necesario que estos registros sean directamente legibles por humanos. Si es necesario, un "espectador" de algún tipo puede mostrar el contenido en forma ASCII.
Por lo tanto, haremos planes para que este registro de tipo transacción se escriba en un almacenamiento binario de alta velocidad.
Gracias parece que las dos respuestas a continuación fueron grandes empujones hacia el desarrollo de nuestra propia solución.
Gracias por aclarar no es posible en log4net y dando el empujón a una solución interna. – Wayne