我不明白
Npgsql
是怎么计算持续时间的,因为用Stopwatch
捕获的经过时间要高一个数量级。
我期待两次测量之间的持续时间更短。
在我的机器上我有这个时间:
Activity.Duration: 00:00:00.0174913
Stopwatch duration: 00:00:00.1394318
您可以通过创建 .NET 控制台应用程序来重现
using System.Diagnostics;
using Npgsql;
using OpenTelemetry;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("npgsql-tester"))
.SetSampler(new AlwaysOnSampler())
.AddSource("MyApp")
.AddNpgsql()
.AddConsoleExporter()
.Build();
var connectionString = "Host=localhost;Database=db;Username=dbuser;Password=dbpassword;";
await using var dataSource = NpgsqlDataSource.Create(connectionString);
await using var cmd = dataSource.CreateCommand("SELECT 1");
var timer = new Stopwatch();
timer.Start();
await cmd.ExecuteScalarAsync();
timer.Stop();
Console.WriteLine($"Stopwatch duration: {timer.Elapsed}");
添加依赖项
dotnet add package Npgsql -v 7.0.2
dotnet add package Npgsql.OpenTelemetry -v 7.0.2
dotnet add package OpenTelemetry.Exporter.Console -v 1.4.0
dotnet add package OpenTelemetry.Instrumentation.SqlClient -v 1.0.0-rc9.13
使用 Docker 启动本地 Postgres 实例
docker run --name npgsql-duration -p 5432:5432 -e POSTGRES_DB=db -e POSTGRES_USER=dbuser -e POSTGRES_PASSWORD=dbpassword -d postgres