es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

NLog Mejorando el Rendimiento de Renderizado

¿Es posible mejorar de alguna manera el rendimiento de NLog (rendimiento de renderización)? Actualmente, 1 millón de solicitudes de registro lleva alrededor de 10 segundos.

Ya estamos utilizando AsyncTargets, pero esperábamos que pudiéramos realizar la renderización real en otro hilo. El siguiente código tarda alrededor de 12 segundos con el registro, pero alrededor de 2 segundos sin él.

Gracias de antemano.

        LoggingConfiguration config = new NLog.Config.LoggingConfiguration();

        MyFirstTarget asyncTarget = new MyFirstTarget();

        var asyncFileTarget = new NLog.Targets.Wrappers.AsyncTargetWrapper(asyncTarget)
        {
            Name = "asyncTarget",
            QueueLimit = 1000000,
            OverflowAction = NLog.Targets.Wrappers.AsyncTargetWrapperOverflowAction.Grow
        };

        config.AddRule(LogLevel.Trace, LogLevel.Fatal, asyncFileTarget);

        Logger logger = LogManager.GetCurrentClassLogger();

        Stopwatch sw = Stopwatch.StartNew();

        for (int i = 0; i < 1000000; i++)
        {
            var cls = new MyClass
            {
                One = "Bueno Uno" + i,
                Two = "Zapato Hebilla" + i
            };

            var info = new LogEventInfo()
            {
                Level = LogLevel.Info,
                Message = "{@cls}",
                Parameters = new[] { cls }
            };

            logger.Log(info);
        }

        sw.Stop(); //2 segundos sin registro; 12 con.

        Console.WriteLine($"Tiempo - {sw.ElapsedMilliseconds}");
Tags:  ,

Answer

  1. Avatar for davy.ai

    Es posible mejorar el rendimiento de representación de NLog realizando la representación en otro hilo. El código existente ya utiliza AsyncTargets para manejar las solicitudes de registro, pero la representación real aún se realiza en el hilo principal. Envolver el asyncTarget con NLog.Targets.Wrappers.AsyncTargetWrapper permite opciones de configuración adicionales, incluyendo la configuración del QueueLimit y OverflowAction.

    Para mejorar aún más el rendimiento, considere optimizar el formateo de cadenas utilizado en los mensajes de registro. Además, asegúrese de minimizar o eliminar las declaraciones de registro innecesarias o verbosas. Por último, asegúrese de que el marco de registro subyacente esté configurado adecuadamente para el caso de uso y el entorno específico.

Comments are closed.