Improve speed and reduce allocations by implementing logger overloads to avoid params [] allocation (#8917)

* Implement logger overloads to avoid params [] allocation

* Implement console logger ILogger

* Call correct signature

* Fix exceptions

* Introduce ILogger2

* fix logger reference

Co-authored-by: Nathan Woulfe <nathan@nathanw.com.au>
This commit is contained in:
Chad
2021-02-22 11:22:49 +13:00
committed by GitHub
parent 6eb260001d
commit b8540ca128
121 changed files with 1364 additions and 316 deletions

View File

@@ -0,0 +1,58 @@
using BenchmarkDotNet.Attributes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Umbraco.Core.Logging;
using Umbraco.Tests.Benchmarks.Config;
namespace Umbraco.Tests.Benchmarks
{
[QuickRunWithMemoryDiagnoserConfig]
public class LoggerAllocationBenchmark
{
private string rawQuery = "";
private int totalItemCount;
[Benchmark(Baseline = true)]
public void Baseline()
{
for (int i = 0; i < 1000; i++)
{
OriginalDebugSignature(GetType(), "DeleteFromIndex with query: {Query} (found {TotalItems} results)", rawQuery, totalItemCount);
}
}
[Benchmark()]
public void NewOverload2()
{
for (int i = 0; i < 1000; i++)
{
NewDebugSignature(GetType(), "DeleteFromIndex with query: {Query} (found {TotalItems} results)", rawQuery, totalItemCount);
}
}
public void OriginalDebugSignature(Type reporting, string messageTemplate, params object[] propertyValues)
{
}
public void NewDebugSignature<T1,T2>(Type reporting, string messageTemplate, T1 param1, T2 param2)
{
}
// BenchmarkDotNet=v0.11.3, OS=Windows 10.0.18362
//Intel Core i5-8265U CPU 1.60GHz(Kaby Lake R), 1 CPU, 8 logical and 4 physical cores
// [Host] : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 32bit LegacyJIT-v4.8.4180.0
// Job-JIATTD : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 32bit LegacyJIT-v4.8.4180.0
//IterationCount=3 IterationTime=100.0000 ms LaunchCount = 1
//WarmupCount=3
// Method | Mean | Error | StdDev | Ratio | Gen 0/1k Op | Gen 1/1k Op | Gen 2/1k Op | Allocated Memory/Op |
//------------- |----------:|----------:|----------:|------:|------------:|------------:|------------:|--------------------:|
// Baseline | 14.599 us | 1.0882 us | 0.0596 us | 1.00 | 10.0420 | - | - | 32048 B |
// NewOverload2 | 1.775 us | 0.4056 us | 0.0222 us | 0.12 | - | - | - | - |
}
}

View File

@@ -55,6 +55,7 @@
<Compile Include="EnumeratorBenchmarks.cs" />
<Compile Include="JsonSerializerSettingsBenchmarks.cs" />
<Compile Include="LinqCastBenchmarks.cs" />
<Compile Include="LoggerAllocationBenchmark.cs" />
<Compile Include="ModelToSqlExpressionHelperBenchmarks.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />