簡體   English   中英

為什么跟蹤和調試級別的日志會在 do.netBenchMark 中給出較小的“已分配”和“平均”結果?

[英]Why do trace and debug level logs give small size "Allocated" and "Mean" result in dotnetBenchMark?

我正在使用do.net 7處理日志嚴重性。 我嘗試了測試 dotNetBenchMark 庫。 我對那個結果有疑問。 據我所知,調試和跟蹤級別的日志比其他級別的信息更多。 如果這是真的,我希望他們應該比其他人使用更多的“分配”。 為什么他們比其他人更快“平均”? 還是我想錯了? 如果你能幫忙,我會很高興。

提前致謝。

我使用了 nlog 庫。 這是我的nlog.config文件:

<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <targets async = "true">
         <target name="console" xsi:type="Console" layout="${date:format=HH\:MM\:ss} ${logger} ${message}" />
    </targets>
    <rules>
       <logger enabled = "true" name="*"  minlevel="trace"  writeTo="console" />
   </rules>
</nlog>

我有非常非常簡單的測試用例。 “添加 2 個數字並提供結果信息”。 代碼如下所示,適用於所有級別:

[Benchmark]
public void DoLogTrace()
{
    var number1 = 30;
    var number2 = 40;
    var number3 = number1 * number2;
    _logger.LogTrace("Method run is completed. The Result is {0}",number3);
}

[Benchmark]
public void DoLogDebug()
{
    var number1 = 30;
    var number2 = 40;
    var number3 = number1 * number2;
    _logger.LogDebug("Method run is completed. The Result is {0}",number3);
}

我得到了以下結果

在此處輸入圖像描述

沒有針對 Debug 或 Trace-events 的特殊優化。 LogTraceLogError只是調用相同底層ILogger.Log方法的擴展方法。

這個想法是,當需要診斷問題時,只啟用 Trace 或 Debug。 當禁用 LogLevel 時,不會生成 output,也不會進行任何分配。

重要的部分是如何構建要進行基准測試的_logger ,它決定了啟用哪些級別來記錄日志及其輸出目標。

如果您關心性能,另請參閱LoggerMessage.Define 並希望避免使用LogTraceLogError -extension-methods 引入的參數數組分配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM