<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: yuze8924</title>
    <description>The latest articles on Forem by yuze8924 (@yuze8924).</description>
    <link>https://forem.com/yuze8924</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1066023%2F3e1ea2df-b949-44ad-bda3-5e9fc6a60e64.png</url>
      <title>Forem: yuze8924</title>
      <link>https://forem.com/yuze8924</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/yuze8924"/>
    <language>en</language>
    <item>
      <title>Dotnet Logger Benchmark</title>
      <dc:creator>yuze8924</dc:creator>
      <pubDate>Sun, 16 Apr 2023 14:50:53 +0000</pubDate>
      <link>https://forem.com/yuze8924/dotnet-logger-benchmark-kn4</link>
      <guid>https://forem.com/yuze8924/dotnet-logger-benchmark-kn4</guid>
      <description>&lt;p&gt;Testing the execution efficiency of different Log methods in various versions of .Net, including .Net 5 through .Net 7.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the conclusion
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;"LoggerMessage.Define&amp;lt;&amp;gt;"&lt;/code&gt; Instead of &lt;code&gt;"Logger.Log()"&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;"LoggerMessageAttribute"&lt;/code&gt; Instead of &lt;code&gt;"LoggerMessage.Define&amp;lt;&amp;gt;"&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In general, &lt;code&gt;LoggerMessage&lt;/code&gt; is the &lt;strong&gt;winner&lt;/strong&gt; all around. As we can see, using &lt;code&gt;LoggerMessage&lt;/code&gt; in different .Net versions results in significantly faster execution times, which in turn leads to better performance in the StdDev aspect relative to using Logger Extension.&lt;/p&gt;

&lt;p&gt;Moreover, starting from .Net 6, the performance of &lt;code&gt;LoggerMessageAttribute&lt;/code&gt; is even better than &lt;code&gt;LoggerMessage.Define&amp;lt;&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  .Net 5
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;
&lt;span class="py"&gt;BenchmarkDotNet&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;v0.13.1, OS=Windows 10.0.22621&lt;/span&gt;
&lt;span class="err"&gt;12th&lt;/span&gt; &lt;span class="err"&gt;Gen&lt;/span&gt; &lt;span class="err"&gt;Intel&lt;/span&gt; &lt;span class="err"&gt;Core&lt;/span&gt; &lt;span class="err"&gt;i7-12700,&lt;/span&gt; &lt;span class="err"&gt;1&lt;/span&gt; &lt;span class="err"&gt;CPU,&lt;/span&gt; &lt;span class="err"&gt;20&lt;/span&gt; &lt;span class="err"&gt;logical&lt;/span&gt; &lt;span class="err"&gt;and&lt;/span&gt; &lt;span class="err"&gt;12&lt;/span&gt; &lt;span class="err"&gt;physical&lt;/span&gt; &lt;span class="err"&gt;cores&lt;/span&gt;
&lt;span class="err"&gt;.NET&lt;/span&gt; &lt;span class="py"&gt;SDK&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;7.0.203&lt;/span&gt;
  &lt;span class="nn"&gt;[Host]&lt;/span&gt;     &lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="err"&gt;.NET&lt;/span&gt; &lt;span class="err"&gt;5.0.17&lt;/span&gt; &lt;span class="err"&gt;(5.0.1722.21314),&lt;/span&gt; &lt;span class="err"&gt;X64&lt;/span&gt; &lt;span class="err"&gt;RyuJIT&lt;/span&gt;
  &lt;span class="err"&gt;DefaultJob&lt;/span&gt; &lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="err"&gt;.NET&lt;/span&gt; &lt;span class="err"&gt;5.0.17&lt;/span&gt; &lt;span class="err"&gt;(5.0.1722.21315),&lt;/span&gt; &lt;span class="err"&gt;X64&lt;/span&gt; &lt;span class="err"&gt;RyuJIT&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F83a377a2j9bv3k5pb0s6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F83a377a2j9bv3k5pb0s6.jpg" alt="Net 5 Benchmark"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  .Net 6
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="py"&gt;BenchmarkDotNet&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;v0.13.5, OS=Windows 11 (10.0.22621.1555/22H2/2022Update/SunValley2)&lt;/span&gt;
&lt;span class="err"&gt;12th&lt;/span&gt; &lt;span class="err"&gt;Gen&lt;/span&gt; &lt;span class="err"&gt;Intel&lt;/span&gt; &lt;span class="err"&gt;Core&lt;/span&gt; &lt;span class="err"&gt;i7-12700,&lt;/span&gt; &lt;span class="err"&gt;1&lt;/span&gt; &lt;span class="err"&gt;CPU,&lt;/span&gt; &lt;span class="err"&gt;20&lt;/span&gt; &lt;span class="err"&gt;logical&lt;/span&gt; &lt;span class="err"&gt;and&lt;/span&gt; &lt;span class="err"&gt;12&lt;/span&gt; &lt;span class="err"&gt;physical&lt;/span&gt; &lt;span class="err"&gt;cores&lt;/span&gt;
&lt;span class="err"&gt;.NET&lt;/span&gt; &lt;span class="py"&gt;SDK&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;7.0.203&lt;/span&gt;
  &lt;span class="nn"&gt;[Host]&lt;/span&gt;     &lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="err"&gt;.NET&lt;/span&gt; &lt;span class="err"&gt;6.0.16&lt;/span&gt; &lt;span class="err"&gt;(6.0.1623.17311),&lt;/span&gt; &lt;span class="err"&gt;X64&lt;/span&gt; &lt;span class="err"&gt;RyuJIT&lt;/span&gt; &lt;span class="err"&gt;AVX2&lt;/span&gt;
  &lt;span class="err"&gt;DefaultJob&lt;/span&gt; &lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="err"&gt;.NET&lt;/span&gt; &lt;span class="err"&gt;6.0.16&lt;/span&gt; &lt;span class="err"&gt;(6.0.1623.17311),&lt;/span&gt; &lt;span class="err"&gt;X64&lt;/span&gt; &lt;span class="err"&gt;RyuJIT&lt;/span&gt; &lt;span class="err"&gt;AVX2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjlue16pefrnd5si23uup.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjlue16pefrnd5si23uup.jpg" alt="Net 6 Benchmark"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  .Net 7
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="py"&gt;BenchmarkDotNet&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;v0.13.5, OS=Windows 11 (10.0.22621.1555/22H2/2022Update/SunValley2)&lt;/span&gt;
&lt;span class="err"&gt;12th&lt;/span&gt; &lt;span class="err"&gt;Gen&lt;/span&gt; &lt;span class="err"&gt;Intel&lt;/span&gt; &lt;span class="err"&gt;Core&lt;/span&gt; &lt;span class="err"&gt;i7-12700,&lt;/span&gt; &lt;span class="err"&gt;1&lt;/span&gt; &lt;span class="err"&gt;CPU,&lt;/span&gt; &lt;span class="err"&gt;20&lt;/span&gt; &lt;span class="err"&gt;logical&lt;/span&gt; &lt;span class="err"&gt;and&lt;/span&gt; &lt;span class="err"&gt;12&lt;/span&gt; &lt;span class="err"&gt;physical&lt;/span&gt; &lt;span class="err"&gt;cores&lt;/span&gt;
&lt;span class="err"&gt;.NET&lt;/span&gt; &lt;span class="py"&gt;SDK&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;7.0.203&lt;/span&gt;
  &lt;span class="nn"&gt;[Host]&lt;/span&gt;     &lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="err"&gt;.NET&lt;/span&gt; &lt;span class="err"&gt;7.0.5&lt;/span&gt; &lt;span class="err"&gt;(7.0.523.17405),&lt;/span&gt; &lt;span class="err"&gt;X64&lt;/span&gt; &lt;span class="err"&gt;RyuJIT&lt;/span&gt; &lt;span class="err"&gt;AVX2&lt;/span&gt;
  &lt;span class="err"&gt;DefaultJob&lt;/span&gt; &lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="err"&gt;.NET&lt;/span&gt; &lt;span class="err"&gt;7.0.5&lt;/span&gt; &lt;span class="err"&gt;(7.0.523.17405),&lt;/span&gt; &lt;span class="err"&gt;X64&lt;/span&gt; &lt;span class="err"&gt;RyuJIT&lt;/span&gt; &lt;span class="err"&gt;AVX2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbq4t3wcw25iwcm3iuwvt.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbq4t3wcw25iwcm3iuwvt.jpg" alt="Net 5 Benchmark"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reference:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.c-sharpcorner.com/article/speed-up-logging-in-net/" rel="noopener noreferrer"&gt;https://www.c-sharpcorner.com/article/speed-up-logging-in-net/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/dotnet/core/extensions/logger-message-generator" rel="noopener noreferrer"&gt;https://learn.microsoft.com/en-us/dotnet/core/extensions/logger-message-generator&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Github: &lt;a href="https://github.com/yuze1995/DotNet.Logger.Benchmark" rel="noopener noreferrer"&gt;https://github.com/yuze1995/DotNet.Logger.Benchmark&lt;/a&gt;&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>csharp</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
