From 604950dd3a613cdec666f28fda31abd6f568b789 Mon Sep 17 00:00:00 2001 From: Rick Drizin Date: Thu, 15 Apr 2021 21:04:01 -0400 Subject: [PATCH] Benchmarks to compare performance against Microsoft Logging proposal ( https://github.com/dotnet/designs/pull/195 / https://github.com/geeknoid/LoggingGenerator ) --- README.md | 12 ++ .../BenchmarkTests-Result.png | Bin 0 -> 10065 bytes .../BenchmarkTests.cs | 107 ++++++++++++++++++ ....Microsoft.Extensions.Logging.Tests.csproj | 32 ++++++ src/InterpolatedLogging.sln | 6 + 5 files changed, 157 insertions(+) create mode 100644 src/InterpolatedLogging.Microsoft.Extensions.Logging.Tests/BenchmarkTests-Result.png create mode 100644 src/InterpolatedLogging.Microsoft.Extensions.Logging.Tests/BenchmarkTests.cs create mode 100644 src/InterpolatedLogging.Microsoft.Extensions.Logging.Tests/InterpolatedLogging.Microsoft.Extensions.Logging.Tests.csproj diff --git a/README.md b/README.md index 1f3e160..ebbf529 100644 --- a/README.md +++ b/README.md @@ -136,6 +136,18 @@ logger.Information($"Processed order in { new { TimeMS = time}:000} ms."); //logger.Information("Processed order in {TimeMS:000}ms.", input, time); ``` +# Performance / Benchmarks + +Some people mentioned that Microsoft is working on a [proposal](https://github.com/dotnet/designs/pull/195) for a [Logging Generator](https://github.com/geeknoid/LoggingGenerator) +which uses C# 9 source generators and which should convert decorated partial-methods into strongly-typed logging functions. + +There are benchmark tests [here](https://github.com/Drizin/InterpolatedLogging/tree/main/src/InterpolatedLogging.Microsoft.Extensions.Logging.Tests/BenchmarkTests.cs) comparing InterpolatedLogging with Microsoft code, +and the results show that the performance of both libraries is nearly identical, and frequently InterpolatedLogging is even faster! Test the results yourself! + +![Benchmarks - Microsoft LoggingGenerator](src/InterpolatedLogging.Microsoft.Extensions.Logging.Tests/BenchmarkTests-Result.png) + + + # Collaborate diff --git a/src/InterpolatedLogging.Microsoft.Extensions.Logging.Tests/BenchmarkTests-Result.png b/src/InterpolatedLogging.Microsoft.Extensions.Logging.Tests/BenchmarkTests-Result.png new file mode 100644 index 0000000000000000000000000000000000000000..1ee68e9cd1fed2d4331d5176a9a4f992c3512203 GIT binary patch literal 10065 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 TbJ+chFWeMlRiBhgn}z)wY%OD} literal 0 HcmV?d00001 diff --git a/src/InterpolatedLogging.Microsoft.Extensions.Logging.Tests/BenchmarkTests.cs b/src/InterpolatedLogging.Microsoft.Extensions.Logging.Tests/BenchmarkTests.cs new file mode 100644 index 0000000..a979670 --- /dev/null +++ b/src/InterpolatedLogging.Microsoft.Extensions.Logging.Tests/BenchmarkTests.cs @@ -0,0 +1,107 @@ +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Console; +using NUnit.Framework; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Data; +using System.Data.SqlClient; +using System.Diagnostics; +using System.Linq; +using System.Reflection; +using static InterpolatedLogging.NamedProperties; + +namespace InterpolatedLogging.Tests +{ + public class BenchmarkTests + { + + + [Test] + public void BenchmarkTest1() + { + System.Diagnostics.Debug.WriteLine($"---------"); + int iteractions = 100000; + + var fac = Microsoft.Extensions.Logging.LoggerFactory.Create((builder) => { builder.SetMinimumLevel(LogLevel.Debug).AddConsole(); }); + var logger = new Microsoft.Extensions.Logging.Logger(fac); + + // Microsoft Logging Generator ( https://github.com/geeknoid/LoggingGenerator ) + var sw = Stopwatch.StartNew(); + for (int i = 0; i < iteractions; i++) + { + Log.CouldNotOpenSocket(logger, Environment.MachineName); + } + System.Diagnostics.Debug.WriteLine($"Microsoft Logging Generator (1 argument): {sw.ElapsedMilliseconds}ms"); + + // InterpolatedLogging + sw = Stopwatch.StartNew(); + for (int i = 0; i < iteractions; i++) + { + logger.InterpolatedDebug($"Could not open socket to `{Environment.MachineName:hostName}`"); + } + System.Diagnostics.Debug.WriteLine($"InterpolatedLogging (1 argument): {sw.ElapsedMilliseconds}ms"); + } + + [Test] + public void BenchmarkTest2() + { + System.Diagnostics.Debug.WriteLine($"---------"); + int iteractions = 100000; + + var fac = Microsoft.Extensions.Logging.LoggerFactory.Create((builder) => { builder.SetMinimumLevel(LogLevel.Debug).AddConsole(); }); + var logger = new Microsoft.Extensions.Logging.Logger(fac); + + // Microsoft Logging Generator ( https://github.com/geeknoid/LoggingGenerator ) + var sw = Stopwatch.StartNew(); + for (int i = 0; i < iteractions; i++) + { + Log.FourArgumentsLog(logger, Environment.MachineName, DateTime.Now, 10, true); + } + System.Diagnostics.Debug.WriteLine($"Microsoft Logging Generator (4 arguments): {sw.ElapsedMilliseconds}ms"); + + // InterpolatedLogging + sw = Stopwatch.StartNew(); + for (int i = 0; i < iteractions; i++) + { + logger.InterpolatedDebug($"Could not open socket to `{Environment.MachineName:hostName}` at {DateTime.Now:Timestamp} with amount {10m:Amount} - flag is {true:Flag}"); + } + System.Diagnostics.Debug.WriteLine($"InterpolatedLogging (4 arguments): {sw.ElapsedMilliseconds}ms"); + } + + + + } + + static partial class Log + { + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Extensions.Logging.Generators", "1.0.0.0")] + private static readonly global::System.Action __CouldNotOpenSocketCallback = + global::Microsoft.Extensions.Logging.LoggerMessage.Define(global::Microsoft.Extensions.Logging.LogLevel.Critical, new global::Microsoft.Extensions.Logging.EventId(0, nameof(CouldNotOpenSocket)), "Could not open socket to `{hostName}`"); + + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Extensions.Logging.Generators", "1.0.0.0")] + public static void CouldNotOpenSocket(Microsoft.Extensions.Logging.ILogger logger, string hostName) + { + if (logger.IsEnabled(global::Microsoft.Extensions.Logging.LogLevel.Critical)) + { + __CouldNotOpenSocketCallback(logger, hostName, null); + } + } + + + + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Extensions.Logging.Generators", "1.0.0.0")] + private static readonly global::System.Action _FourArgumentsCallback = + global::Microsoft.Extensions.Logging.LoggerMessage.Define(global::Microsoft.Extensions.Logging.LogLevel.Critical, new global::Microsoft.Extensions.Logging.EventId(0, nameof(CouldNotOpenSocket)), "Could not open socket to `{hostName}` at {Timestamp} with amount {Amount} - flag is {Flag}"); + + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Extensions.Logging.Generators", "1.0.0.0")] + public static void FourArgumentsLog(Microsoft.Extensions.Logging.ILogger logger, string hostName, DateTime now, decimal amount, bool flag) + { + if (logger.IsEnabled(global::Microsoft.Extensions.Logging.LogLevel.Critical)) + { + _FourArgumentsCallback(logger, hostName, now, amount, flag, null); + } + } + + } +} diff --git a/src/InterpolatedLogging.Microsoft.Extensions.Logging.Tests/InterpolatedLogging.Microsoft.Extensions.Logging.Tests.csproj b/src/InterpolatedLogging.Microsoft.Extensions.Logging.Tests/InterpolatedLogging.Microsoft.Extensions.Logging.Tests.csproj new file mode 100644 index 0000000..bfcc21d --- /dev/null +++ b/src/InterpolatedLogging.Microsoft.Extensions.Logging.Tests/InterpolatedLogging.Microsoft.Extensions.Logging.Tests.csproj @@ -0,0 +1,32 @@ + + + + netcoreapp2.1 + + false + + Rick Drizin + + Rick Drizin + + MIT + + https://github.com/Drizin/InterpolatedLogging/ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/InterpolatedLogging.sln b/src/InterpolatedLogging.sln index 9ed2ee9..36dd038 100644 --- a/src/InterpolatedLogging.sln +++ b/src/InterpolatedLogging.sln @@ -13,6 +13,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InterpolatedLogging.Microso EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InterpolatedLogging.NLog", "InterpolatedLogging.NLog\InterpolatedLogging.NLog.csproj", "{5874FE09-2F1F-48AA-990A-AA1214AA2BF5}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InterpolatedLogging.Microsoft.Extensions.Logging.Tests", "InterpolatedLogging.Microsoft.Extensions.Logging.Tests\InterpolatedLogging.Microsoft.Extensions.Logging.Tests.csproj", "{D46D5A79-1BB2-4834-988C-FB94827A479D}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -39,6 +41,10 @@ Global {5874FE09-2F1F-48AA-990A-AA1214AA2BF5}.Debug|Any CPU.Build.0 = Debug|Any CPU {5874FE09-2F1F-48AA-990A-AA1214AA2BF5}.Release|Any CPU.ActiveCfg = Release|Any CPU {5874FE09-2F1F-48AA-990A-AA1214AA2BF5}.Release|Any CPU.Build.0 = Release|Any CPU + {D46D5A79-1BB2-4834-988C-FB94827A479D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D46D5A79-1BB2-4834-988C-FB94827A479D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D46D5A79-1BB2-4834-988C-FB94827A479D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D46D5A79-1BB2-4834-988C-FB94827A479D}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE