From 86335e0d449f4df79ff596b6326fc4daba4d33c0 Mon Sep 17 00:00:00 2001 From: Chris Cameron Date: Tue, 31 Jul 2018 14:43:55 -0400 Subject: [PATCH] perf: String utils micro-optimizations --- ICD.Common.Utils/StringUtils.cs | 41 ++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/ICD.Common.Utils/StringUtils.cs b/ICD.Common.Utils/StringUtils.cs index de9815f..812356c 100644 --- a/ICD.Common.Utils/StringUtils.cs +++ b/ICD.Common.Utils/StringUtils.cs @@ -47,8 +47,12 @@ namespace ICD.Common.Utils if (input == null) throw new ArgumentNullException("input"); - string[] strings = input.Select(c => ToHexLiteral(c)).ToArray(); - return string.Join("", strings); + StringBuilder builder = new StringBuilder(); + + foreach (string literal in input.Select(c => ToHexLiteral(c))) + builder.Append(literal); + + return builder.ToString(); } /// @@ -80,7 +84,12 @@ namespace ICD.Common.Utils if (data == null) throw new ArgumentNullException("data"); - return string.Join("", data.Split(4).Select(s => FromHexLiteralCharacter(s).ToString()).ToArray()); + StringBuilder builder = new StringBuilder(); + + foreach (char item in data.Split(4).Select(s => FromHexLiteralCharacter(s))) + builder.Append(item); + + return builder.ToString(); } /// @@ -112,8 +121,12 @@ namespace ICD.Common.Utils if (input == null) throw new ArgumentNullException("input"); - string[] strings = input.Select(c => ToMixedReadableHexLiteral(c)).ToArray(); - return string.Join("", strings); + StringBuilder builder = new StringBuilder(); + + foreach (string item in input.Select(c => ToMixedReadableHexLiteral(c))) + builder.Append(item); + + return builder.ToString(); } /// @@ -424,7 +437,23 @@ namespace ICD.Common.Utils if (items == null) throw new ArgumentNullException("items"); - return string.Format("[{0}]", string.Join(", ", items.Select(i => ToString(i)).ToArray())); + StringBuilder builder = new StringBuilder(); + builder.Append('['); + + bool first = true; + + foreach (T item in items) + { + if (!first) + builder.Append(", "); + first = false; + + builder.Append(ToString(item)); + } + + builder.Append(']'); + + return builder.ToString(); } ///