From 02835913b8304dabe4d6613a080fa21d14fba186 Mon Sep 17 00:00:00 2001 From: Stephen Toub Date: Thu, 29 Oct 2020 18:10:58 -0400 Subject: [PATCH] Remove some unnecessary List-related allocation from EventSource (#44026) --- .../src/System/Diagnostics/Tracing/EventSource.cs | 51 +++++++--------------- 1 file changed, 16 insertions(+), 35 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/EventSource.cs b/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/EventSource.cs index 3a5da5c..2492b01 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/EventSource.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/EventSource.cs @@ -2277,8 +2277,8 @@ namespace System.Diagnostics.Tracing EventWrittenEventArgs eventCallbackArgs = new EventWrittenEventArgs(this); eventCallbackArgs.EventId = 0; eventCallbackArgs.Message = msg; - eventCallbackArgs.Payload = new ReadOnlyCollection(new List() { msg }); - eventCallbackArgs.PayloadNames = new ReadOnlyCollection(new List { "message" }); + eventCallbackArgs.Payload = new ReadOnlyCollection(new object[] { msg }); + eventCallbackArgs.PayloadNames = new ReadOnlyCollection(new string[] { "message" }); eventCallbackArgs.EventName = eventName; for (EventDispatcher? dispatcher = m_Dispatchers; dispatcher != null; dispatcher = dispatcher.m_Next) @@ -4589,11 +4589,13 @@ namespace System.Diagnostics.Tracing // do the lazy init if you know it is contract based (EventID >= 0) if (EventId >= 0 && m_payloadNames == null) { - var names = new List(); Debug.Assert(m_eventSource.m_eventData != null); - foreach (ParameterInfo parameter in m_eventSource.m_eventData[EventId].Parameters) + ParameterInfo[] parameters = m_eventSource.m_eventData[EventId].Parameters; + + string[] names = new string[parameters.Length]; + for (int i = 0; i < parameters.Length; i++) { - names.Add(parameter.Name!); + names[i] = parameters[i].Name!; } m_payloadNames = new ReadOnlyCollection(names); @@ -5686,27 +5688,21 @@ namespace System.Diagnostics.Tracing // Output the localization information. sb.AppendLine(""); - List cultures = (resources != null && (flags & EventManifestOptions.AllCultures) != 0) ? - GetSupportedCultures() : - new List() { CultureInfo.CurrentUICulture }; - var sortedStrings = new string[stringTab.Keys.Count]; stringTab.Keys.CopyTo(sortedStrings, 0); Array.Sort(sortedStrings, 0, sortedStrings.Length); - foreach (CultureInfo ci in cultures) + CultureInfo ci = CultureInfo.CurrentUICulture; + sb.Append(" "); + sb.AppendLine(" "); + foreach (string stringKey in sortedStrings) { - sb.Append(" "); - sb.AppendLine(" "); - - foreach (string stringKey in sortedStrings) - { - string? val = GetLocalizedMessage(stringKey, ci, etwFormat: true); - sb.Append(" "); - } - sb.AppendLine(" "); - sb.AppendLine(" "); + string? val = GetLocalizedMessage(stringKey, ci, etwFormat: true); + sb.Append(" "); } + sb.AppendLine(" "); + sb.AppendLine(" "); + sb.AppendLine(""); sb.AppendLine(""); return sb.ToString(); @@ -5764,21 +5760,6 @@ namespace System.Diagnostics.Tracing return value; } - /// - /// There's no API to enumerate all languages an assembly is localized into, so instead - /// we enumerate through all the "known" cultures and attempt to load a corresponding satellite - /// assembly - /// - /// - private static List GetSupportedCultures() - { - var cultures = new List(); - - if (!cultures.Contains(CultureInfo.CurrentUICulture)) - cultures.Insert(0, CultureInfo.CurrentUICulture); - return cultures; - } - private static string GetLevelName(EventLevel level) { return (((int)level >= 16) ? "" : "win:") + level.ToString(); -- 2.7.4