tools/Elastic.CommonSchema.Benchmarks/SerializingStringBuilderBase.cs (73 lines of code) (raw):
using System;
using System.Text;
using AutoBogus;
using BenchmarkDotNet.Attributes;
using Bogus;
namespace Elastic.CommonSchema.Benchmarks
{
[UnicodeConsoleLogger, MemoryDiagnoser, ThreadingDiagnoser]
public class SerializingStringBuilderBase
{
[Benchmark]
public StringBuilder Empty()
{
var ecs = new EcsDocument();
return ecs.Serialize(new StringBuilder());
}
[Benchmark]
public StringBuilder Minimal()
{
var ecs = new EcsDocument
{
Timestamp = DateTimeOffset.UtcNow,
Log = new Log
{
Level = "Debug"
},
Message = "hello world!"
};
return ecs.Serialize(new StringBuilder());
}
[Benchmark]
public StringBuilder Complex()
{
var ecs = new EcsDocument
{
Timestamp = DateTimeOffset.UtcNow,
Log = new Log
{
Level = "Debug", Logger = "Logger",
OriginFunction = "Complext",
OriginFileLine = 12,
OriginFileName = "file.cs",
Syslog = new LogSyslog {
FacilityCode = 12,
FacilityName = "syslog",
Priority = 12,
SeverityCode = 12,
SeverityName = "asd",
}
},
Message = "hello world!",
Agent = new Agent
{
Name = "test"
}
};
return ecs.Serialize(new StringBuilder());
}
private static Faker<EcsDocument> Generator;
private static EcsDocument FullInstance;
[GlobalSetup]
public void GlobalSetup()
{
Generator =
new AutoFaker<EcsDocument>()
.RuleFor(d => d.Metadata, _ => new MetadataDictionary { { "x", "y" } })
.UseSeed(1337);
FullInstance = Generator.Generate();
}
[Benchmark]
public StringBuilder Full() => FullInstance.Serialize(new StringBuilder());
}
}