diff --git a/Serilog.Enrichers.CallStack/CallStackEnricher.cs b/Serilog.Enrichers.CallStack/CallStackEnricher.cs index a88c69a..86ab270 100644 --- a/Serilog.Enrichers.CallStack/CallStackEnricher.cs +++ b/Serilog.Enrichers.CallStack/CallStackEnricher.cs @@ -6,6 +6,7 @@ using System.IO; using System.Linq; using System.Reflection; +using System.Text; namespace Serilog.Enrichers.CallStack; @@ -350,18 +351,23 @@ private string BuildCallStackString(StackFrame[] frames) relevantFrames = relevantFrames.Take(_configuration.MaxFrames).ToArray(); } - var callStackParts = new List(); + // Performance optimization: Use StringBuilder to reduce string allocations + var sb = new StringBuilder(); + var isFirst = true; foreach (var frame in relevantFrames) { var frameString = FormatStackFrame(frame); if (!string.IsNullOrEmpty(frameString)) { - callStackParts.Add(frameString); + if (!isFirst) + sb.Append(" --> "); + sb.Append(frameString); + isFirst = false; } } - return callStackParts.Count > 0 ? string.Join(" --> ", callStackParts) : string.Empty; + return sb.Length > 0 ? sb.ToString() : string.Empty; } ///