Skip to content

Commit 2882af0

Browse files
committed
WIP
1 parent 2c473f0 commit 2882af0

File tree

6 files changed

+177
-62
lines changed

6 files changed

+177
-62
lines changed

Benchmarks/Benchmarks.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
55
<TargetFramework>net5.0</TargetFramework>
6+
<Nullable>enable</Nullable>
67
</PropertyGroup>
78

89
<ItemGroup>

Benchmarks/LoggerBenchmark.cs

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
using BenchmarkDotNet.Attributes;
2+
using Microsoft.Extensions.Logging;
3+
using SqliteLogger;
4+
using System;
5+
using System.Collections.Generic;
6+
7+
namespace Benchmarks
8+
{
9+
[MemoryDiagnoser]
10+
[MarkdownExporterAttribute.GitHub]
11+
public class LoggerBenchmark
12+
{
13+
private ILogger<Program> logger;
14+
private ILoggerFactory loggerFactory;
15+
16+
[GlobalSetup(Targets = new[] { nameof(SqliteLoggerFile), nameof(SqliteLoggerInMemory) })]
17+
[Arguments("Data Source=test.db", "Data Source=:memory:")]
18+
public void GlobalSetupSqliteLoggerFile(string connectionString)
19+
{
20+
loggerFactory?.Dispose();
21+
loggerFactory = LoggerFactory.Create(builder =>
22+
builder.AddSqliteLogger(options =>
23+
{
24+
options.ConnectionString = connectionString;
25+
}));
26+
27+
logger = loggerFactory.CreateLogger<Program>();
28+
}
29+
30+
//[GlobalSetup(Target = nameof(SqliteLoggerInMemory))]
31+
//public void GlobalSetupSqliteLoggerInMemory()
32+
//{
33+
// loggerFactory =
34+
// LoggerFactory.Create(builder =>
35+
// builder.AddSqliteLogger(options =>
36+
// {
37+
// options.ConnectionString = "Data Source=:memory:";
38+
// }));
39+
40+
// logger = loggerFactory.CreateLogger<Program>();
41+
//}
42+
43+
//[GlobalSetup(Target = nameof(SqliteLoggerFile))]
44+
//public void GlobalSetupSqliteLoggerFile()
45+
//{
46+
// loggerFactory =
47+
// LoggerFactory.Create(builder =>
48+
// builder.AddSqliteLogger(options =>
49+
// {
50+
// options.ConnectionString = "Data Source=test.db";
51+
// }));
52+
53+
// logger = loggerFactory.CreateLogger<Program>();
54+
//}
55+
56+
[GlobalSetup(Target = nameof(ConsoleLogger))]
57+
public void GlobalSetupConsoleLogger()
58+
{
59+
loggerFactory =
60+
LoggerFactory.Create(builder =>
61+
builder.AddConsole());
62+
63+
logger = loggerFactory.CreateLogger<Program>();
64+
}
65+
66+
[Benchmark]
67+
public void SqliteLoggerInMemory() => logger.LogInformation("Hello World!");
68+
69+
[Benchmark]
70+
public void SqliteLoggerFile() => logger.LogInformation("Hello World!");
71+
72+
[Benchmark (Baseline = true)]
73+
public void ConsoleLogger() => logger.LogInformation("Hello World!");
74+
75+
[GlobalCleanup]
76+
public void GlobalCleanup()
77+
{
78+
loggerFactory?.Dispose();
79+
}
80+
}
81+
}

Benchmarks/Program.cs

Lines changed: 5 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,17 @@
1-
using BenchmarkDotNet.Attributes;
1+
using BenchmarkDotNet.Configs;
22
using BenchmarkDotNet.Running;
3-
using Microsoft.Extensions.Logging;
4-
using SqliteLogger;
53

64
namespace Benchmarks
75
{
8-
[MemoryDiagnoser]
9-
[MarkdownExporterAttribute.GitHub]
10-
public class LoggerBenchmark
11-
{
12-
private ILogger<Program> logger;
13-
private ILoggerFactory loggerFactory;
14-
15-
[GlobalSetup(Target = nameof(SqliteLoggerInMemory))]
16-
public void GlobalSetupSqliteLoggerInMemory()
17-
{
18-
loggerFactory =
19-
LoggerFactory.Create(builder =>
20-
builder.AddSqliteLogger(options =>
21-
{
22-
options.ConnectionString = "Data Source=:memory:";
23-
}));
24-
25-
logger = loggerFactory.CreateLogger<Program>();
26-
}
27-
28-
[GlobalSetup(Target = nameof(SqliteLoggerFile))]
29-
public void GlobalSetupSqliteLoggerFile()
30-
{
31-
loggerFactory =
32-
LoggerFactory.Create(builder =>
33-
builder.AddSqliteLogger(options =>
34-
{
35-
options.ConnectionString = "Data Source=test.db";
36-
}));
37-
38-
logger = loggerFactory.CreateLogger<Program>();
39-
}
40-
41-
[GlobalSetup(Target = nameof(ConsoleLogger))]
42-
public void GlobalSetupConsoleDerp()
43-
{
44-
loggerFactory =
45-
LoggerFactory.Create(builder =>
46-
builder.AddConsole());
47-
48-
logger = loggerFactory.CreateLogger<Program>();
49-
}
50-
51-
[Benchmark]
52-
public void SqliteLoggerInMemory() => logger.LogInformation("Hello World!");
53-
54-
[Benchmark]
55-
public void SqliteLoggerFile() => logger.LogInformation("Hello World!");
56-
57-
[Benchmark (Baseline = true)]
58-
public void ConsoleLogger() => logger.LogInformation("Hello World!");
59-
60-
[GlobalCleanup]
61-
public void GlobalCleanup()
62-
{
63-
loggerFactory?.Dispose();
64-
}
65-
}
666

677
class Program
688
{
699
static void Main(string[] args)
7010
{
71-
BenchmarkRunner.Run<LoggerBenchmark>();
11+
//BenchmarkRunner.Run<LoggerBenchmark>();
12+
//BenchmarkRunner.Run<MoreComplicatedBenchmark>();
13+
14+
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
7215
//BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args, new DebugInProcessConfig());
7316
}
7417
}

Benchmarks/ScopeBenchmark.cs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
using BenchmarkDotNet.Attributes;
2+
using Microsoft.Extensions.Logging;
3+
using SqliteLogger;
4+
using System;
5+
using System.Collections.Generic;
6+
using System.Linq;
7+
using System.Text;
8+
using System.Threading.Tasks;
9+
10+
namespace Benchmarks
11+
{
12+
[MemoryDiagnoser]
13+
[MarkdownExporterAttribute.GitHub]
14+
public class ScopeBenchmark
15+
{
16+
private ILogger<Program> logger;
17+
private ILoggerFactory loggerFactory;
18+
19+
[Params("Data Source=:memory:", "Data Source=test.db")]
20+
public string ConnectionString;
21+
22+
public static IEnumerable<IReadOnlyCollection<KeyValuePair<string, object?>>> ScopeGenerator()
23+
{
24+
yield return new List<KeyValuePair<string, object?>>() { KeyValuePair.Create<string, object?>("scopeName", "scopeValue") };
25+
yield return new Dictionary<string, object?>() { { "key1", "value1" }, { "key2", 1234 } };
26+
yield return new Dictionary<string, object?>() { { "key1", "value1" }, { "key2", 1234 }, { "key3", new[] { new { a = 1, b = new { b1 = "b2" } } } } };
27+
}
28+
29+
[GlobalSetup]
30+
public void GlobalSetup()
31+
{
32+
loggerFactory =
33+
LoggerFactory.Create(builder =>
34+
builder.AddSqliteLogger(options =>
35+
{
36+
options.ConnectionString = ConnectionString;
37+
}));
38+
39+
logger = loggerFactory.CreateLogger<Program>();
40+
}
41+
42+
[GlobalCleanup]
43+
public void GlobalCleanup()
44+
{
45+
loggerFactory?.Dispose();
46+
}
47+
48+
[Benchmark]
49+
[ArgumentsSource(nameof(ScopeGenerator))]
50+
public void SqliteLoggerInMemory(IReadOnlyCollection<KeyValuePair<string, object?>> scopeCollection)
51+
{
52+
using IDisposable scope = logger.BeginScope(scopeCollection);
53+
logger.LogInformation("Hello World!");
54+
}
55+
}
56+
}

Benchmarks/global.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"sdk": {
3+
"version": "5.0.302"
4+
}
5+
}

Console/LogQueueTask.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using Microsoft.Data.Sqlite;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading;
7+
using System.Threading.Tasks;
8+
9+
namespace Console
10+
{
11+
public class LogQueueTask
12+
{
13+
private readonly SqliteConnection _source;
14+
private readonly SqliteConnection _destination;
15+
16+
public LogQueueTask(SqliteConnection source, SqliteConnection destination)
17+
{
18+
19+
}
20+
21+
public async Task RunAsync(CancellationToken stoppingToken)
22+
{
23+
if (stoppingToken.IsCancellationRequested)
24+
return;
25+
26+
27+
}
28+
}
29+
}

0 commit comments

Comments
 (0)