diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Diagnostics/SqlClientMetrics.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Diagnostics/SqlClientMetrics.cs index 9319087a75..9f49080361 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Diagnostics/SqlClientMetrics.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Diagnostics/SqlClientMetrics.cs @@ -92,7 +92,7 @@ internal sealed partial class SqlClientMetrics private string? _instanceName; #endif - public SqlClientMetrics(SqlClientEventSource eventSource) + public SqlClientMetrics(SqlClientEventSource eventSource, bool enableMetrics) { _eventSource = eventSource; @@ -100,6 +100,11 @@ public SqlClientMetrics(SqlClientEventSource eventSource) // On .NET Framework, metrics are exposed as performance counters and are always enabled. // On .NET Core, metrics are exposed as EventCounters, and require explicit enablement. EnablePerformanceCounters(); +#else + if (enableMetrics) + { + EnableEventCounters(); + } #endif } diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlClientEventSource.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlClientEventSource.cs index 75f87ea13c..4988a4f4da 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlClientEventSource.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlClientEventSource.cs @@ -15,11 +15,13 @@ namespace Microsoft.Data.SqlClient [EventSource(Name = "Microsoft.Data.SqlClient.EventSource")] internal partial class SqlClientEventSource : EventSource { + private static bool s_initialMetricsEnabled = false; + // Defines the singleton instance for the Resources ETW provider public static readonly SqlClientEventSource Log = new(); // Provides access to metrics. - public static readonly SqlClientMetrics Metrics = new SqlClientMetrics(Log); + public static readonly SqlClientMetrics Metrics = new SqlClientMetrics(Log, s_initialMetricsEnabled); private SqlClientEventSource() { } @@ -33,7 +35,14 @@ protected override void OnEventCommand(EventCommandEventArgs command) if (command.Command == EventCommand.Enable) { - Metrics.EnableEventCounters(); + if (Metrics == null) + { + s_initialMetricsEnabled = true; + } + else + { + Metrics.EnableEventCounters(); + } } } #endif