Code: Select all
[MemoryDiagnoser]
public class SerilogBenchmark
{
private static readonly ILogger Logger;
private static readonly string LogStringTemplate = "User {Username} {Email} has logged in.";
private static Action LoggerAction =
LoggerMessage.Define(
LogLevel.Information,
new EventId(1, "Login"),
LogStringTemplate);
static SerilogBenchmark()
{
var services = new ServiceCollection();
Log.Logger = new LoggerConfiguration()
.WriteTo.TextWriter(TextWriter.Null)
.CreateLogger();
services.AddLogging(builder =>
{
builder.ClearProviders();
builder.AddSerilog(dispose: true);
});
var serviceProvider = services.BuildServiceProvider();
Logger = serviceProvider.GetRequiredService();
}
[Benchmark]
public void TestLogExtension()
{
Logger.LogInformation(LogStringTemplate, "User", "foo@bar.com");
}
[Benchmark]
public void TestLogAction()
{
LoggerAction(Logger, "User", "foo@bar.com", null);
}
}

„Hochleistungsprotokollierung“ hat mich also mit 50 % mehr Speicherzuweisung und 25 % schlechterer Leistung belohnt.
Könnte Bitte hilft mir jemand zu verstehen, was hier falsch sein könnte Wie kann eine Leistungssteigerung erzielt werden, wenn Logger-Nachrichten mit Serilog als Logger verwendet werden?