diff options
author | Mike Krüger <mikkrg@microsoft.com> | 2018-02-26 12:30:08 +0300 |
---|---|---|
committer | Mike Krüger <mikkrg@microsoft.com> | 2018-02-26 12:30:08 +0300 |
commit | 388f883011578279a41be0a3fa8c3f1e53b55ab0 (patch) | |
tree | 0f07ec282f19d9839496a92b55c78d706ded8448 /main/src | |
parent | 138dd59b68cbe677be22ed4e5943684261351e54 (diff) |
[Core] Use StringBuilderCache
Diffstat (limited to 'main/src')
19 files changed, 71 insertions, 59 deletions
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Assemblies/PcFileCache.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Assemblies/PcFileCache.cs index 167d48924e..3b7e7a3b88 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Assemblies/PcFileCache.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Assemblies/PcFileCache.cs @@ -29,6 +29,7 @@ using System.Text; using System.Xml; using System.IO; using System.Collections.Generic; +using MonoDevelop.Core; // IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT // This code is shared with xbuild, which has to build with .NET 2.0, @@ -535,7 +536,7 @@ namespace Mono.PkgConfig if (i == -1) return value; - StringBuilder sb = new StringBuilder (); + StringBuilder sb = StringBuilderCache.Allocate (); int last = 0; while (i != -1 && i < value.Length) { sb.Append (value, last, i - last); @@ -546,6 +547,7 @@ namespace Mono.PkgConfig if (n == -1 || n == i) { // Closing bracket not found or empty name HasErrors = true; + StringBuilderCache.Free (sb); return value; } string rname = value.Substring (i, n - i); @@ -554,6 +556,7 @@ namespace Mono.PkgConfig sb.Append (rval); else { HasErrors = true; + StringBuilderCache.Free (sb); return value; } i = n + 1; @@ -565,7 +568,7 @@ namespace Mono.PkgConfig i = value.IndexOf ("${", i); } sb.Append (value, last, value.Length - last); - return sb.ToString (); + return StringBuilderCache.ReturnAndFree (sb); } } diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/BinaryMessage.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/BinaryMessage.cs index 14e6d4fae8..6ddc95264f 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/BinaryMessage.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/BinaryMessage.cs @@ -609,14 +609,14 @@ namespace MonoDevelop.Core.Execution public override string ToString () { - var sb = new StringBuilder (); + var sb = StringBuilderCache.Allocate (); foreach (var ar in args) { if (sb.Length > 0) sb.Append (", "); sb.Append (ar.Name).Append (":"); AppendArg (sb, ar.Value); } - return string.Format ("({3}) [{0} Target={1}, Args=[{2}]]", Name, Target, sb, Id); + return string.Format ("({3}) [{0} Target={1}, Args=[{2}]]", Name, Target, StringBuilderCache.ReturnAndFree (sb), Id); } void AppendArg (StringBuilder sb, object arg) diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/LocalConsole.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/LocalConsole.cs index 17b496bf80..cadd1fd113 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/LocalConsole.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/LocalConsole.cs @@ -221,36 +221,36 @@ namespace MonoDevelop.Core.Execution public override string ReadLine () { - StringBuilder sb = new StringBuilder (); + StringBuilder sb = StringBuilderCache.Allocate (); while (LoadCurrent (true)) { for (int i=idx; i < current.Length; i++) { if (current[i] == '\n') { idx = i + 1; sb.Append (current, 0, i); - return sb.ToString (); + return StringBuilderCache.ReturnAndFree (sb); } if (current[i] == '\r') { idx = i + 1; sb.Append (current, 0, i); if (LoadCurrent (true) && current [idx] == '\n') idx++; - return sb.ToString (); + return StringBuilderCache.ReturnAndFree (sb); } } sb.Append (current, idx, current.Length - idx); current = null; } - return sb.ToString (); + return StringBuilderCache.ReturnAndFree (sb); } public override string ReadToEnd () { - StringBuilder sb = new StringBuilder (); + StringBuilder sb = StringBuilderCache.Allocate (); while (LoadCurrent (true)) { sb.Append (current, idx, current.Length - idx); current = null; } - return sb.ToString (); + return StringBuilderCache.ReturnAndFree (sb); } } diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/ProcessArgumentBuilder.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/ProcessArgumentBuilder.cs index f43d1d72a5..f875d79a2d 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/ProcessArgumentBuilder.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/ProcessArgumentBuilder.cs @@ -115,11 +115,11 @@ namespace MonoDevelop.Core.Execution /// arguments, only quoted arguments with escaped quotes.</remarks> public static string Quote (string s) { - var sb = new StringBuilder (); + var sb = StringBuilderCache.Allocate (); sb.Append ('"'); AppendEscaped (sb, escapeDoubleQuoteCharsStr, s); sb.Append ('"'); - return sb.ToString (); + return StringBuilderCache.ReturnAndFree (sb); } public override string ToString () diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Text/TextChangeEventArgs.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Text/TextChangeEventArgs.cs index 31e5958e46..2f312311ac 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Text/TextChangeEventArgs.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Text/TextChangeEventArgs.cs @@ -222,7 +222,7 @@ namespace MonoDevelop.Core.Text { if (text == null) return null; - var sb = new StringBuilder (); + var sb = StringBuilderCache.Allocate (); foreach (var ch in text) { switch (ch) { case '\r': @@ -239,7 +239,7 @@ namespace MonoDevelop.Core.Text break; } } - return sb.ToString (); + return StringBuilderCache.ReturnAndFree (sb); } } } diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Core/ErrorHelper.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Core/ErrorHelper.cs index 73e1f56ec5..610d7cd346 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Core/ErrorHelper.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Core/ErrorHelper.cs @@ -51,13 +51,13 @@ namespace MonoDevelop.Core var ae = (AggregateException)ex; if (ae.InnerExceptions.Count == 1) return GetErrorMessage (ae.InnerException); - StringBuilder sb = new StringBuilder (); + StringBuilder sb = StringBuilderCache.Allocate (); foreach (var e in ae.InnerExceptions) { if (sb.Length > 0 && sb [sb.Length - 1] != '.') sb.Append (". "); sb.Append (GetErrorMessage (ex).Trim ()); } - return sb.ToString (); + return StringBuilderCache.ReturnAndFree (sb); } else if (ex is UserException) { var ue = (UserException)ex; if (!string.IsNullOrEmpty (ue.Details)) { diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Core/Properties.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Core/Properties.cs index 1f33234b3d..8b18107d45 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Core/Properties.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Core/Properties.cs @@ -344,7 +344,7 @@ namespace MonoDevelop.Core public override string ToString () { - StringBuilder result = new StringBuilder (); + StringBuilder result = StringBuilderCache.Allocate (); result.Append ("[Properties:"); foreach (KeyValuePair<string, object> property in this.properties) { result.Append (property.Key); @@ -353,7 +353,7 @@ namespace MonoDevelop.Core result.Append (","); } result.Append ("]"); - return result.ToString (); + return StringBuilderCache.ReturnAndFree (result); } public Properties Clone () diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Core/PropertyBag.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Core/PropertyBag.cs index 6f306b490d..5af30dff22 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Core/PropertyBag.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Core/PropertyBag.cs @@ -246,7 +246,7 @@ namespace MonoDevelop.Core string EscapeName (string str) { - StringBuilder sb = new StringBuilder (str.Length); + StringBuilder sb = StringBuilderCache.Allocate (); for (int n=0; n<str.Length; n++) { char c = str [n]; if (c == '_') @@ -259,24 +259,24 @@ namespace MonoDevelop.Core else sb.Append (c); } - return sb.ToString (); + return StringBuilderCache.ReturnAndFree (sb); } string UnescapeName (string str) { - StringBuilder sb = new StringBuilder (str.Length); + StringBuilder sb = StringBuilderCache.Allocate (); for (int n=0; n<str.Length; n++) { char c = str [n]; if (c == '_') { if (n + 1 >= str.Length) - return sb.ToString (); + return StringBuilderCache.ReturnAndFree (sb); if (str [n + 1] == '_') { sb.Append (c); n++; } else { int len = int.Parse (str.Substring (n+1,1)); if (n + 2 + len - 1 >= str.Length) - return sb.ToString (); + return StringBuilderCache.ReturnAndFree (sb); int ic; if (int.TryParse (str.Substring (n + 2, len), NumberStyles.HexNumber, null, out ic)) sb.Append ((char)ic); @@ -285,7 +285,7 @@ namespace MonoDevelop.Core } else sb.Append (c); } - return sb.ToString (); + return StringBuilderCache.ReturnAndFree (sb); } } diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Core/StringBuilderCache.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Core/StringBuilderCache.cs index b1cde57805..8c01bb2310 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Core/StringBuilderCache.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Core/StringBuilderCache.cs @@ -38,6 +38,11 @@ namespace MonoDevelop.Core return SharedPools.Default<StringBuilder> ().Allocate (); } + public static StringBuilder Allocate (string text) + { + return SharedPools.Default<StringBuilder> ().Allocate ().Append (text); + } + public static void Free (StringBuilder sb) { sb.Clear (); diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Core/StringParserService.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Core/StringParserService.cs index 77ebc71804..d78ff2f29d 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Core/StringParserService.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Core/StringParserService.cs @@ -196,7 +196,7 @@ namespace MonoDevelop.Core public static string Parse (string input, IStringTagModel customTags) { - StringBuilder result = new StringBuilder (input.Length); + StringBuilder result = StringBuilderCache.Allocate (); int brace; int i = 0; @@ -225,7 +225,7 @@ namespace MonoDevelop.Core } i++; } - return result.ToString (); + return StringBuilderCache.ReturnAndFree (result); } public static IEnumerable<IStringTagProvider> GetProviders () diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild.Conditions/ConditionParser.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild.Conditions/ConditionParser.cs index 65cc6cbfa4..98f58747ae 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild.Conditions/ConditionParser.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild.Conditions/ConditionParser.cs @@ -257,7 +257,7 @@ namespace MonoDevelop.Projects.MSBuild.Conditions { if (tokenizer.IsEOF ()) throw new ExpressionParseException ("Missing closing parenthesis in condition " + conditionStr); - StringBuilder sb = new StringBuilder (); + StringBuilder sb = Core.StringBuilderCache.Allocate (); sb.AppendFormat ("{0}({1}", prefix, tokenizer.Token.Value); tokenizer.GetNextToken (); @@ -280,7 +280,7 @@ namespace MonoDevelop.Projects.MSBuild.Conditions { sb.Append (")"); //FIXME: HACKY! - return new ConditionFactorExpression (new Token (sb.ToString (), TokenType.String, token_pos)); + return new ConditionFactorExpression (new Token (Core.StringBuilderCache.ReturnAndFree (sb), TokenType.String, token_pos)); } void ThrowParseException(TokenType type, string error_fmt, params object[] args) diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/DefaultMSBuildEngine.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/DefaultMSBuildEngine.cs index e5e9a05e5c..d9873559ec 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/DefaultMSBuildEngine.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/DefaultMSBuildEngine.cs @@ -645,18 +645,18 @@ namespace MonoDevelop.Projects.MSBuild items = result; return true; } else if (ExecuteTransformItemListFunction (ref transformItems, itemFunction, itemFunctionArgs, out ignoreMetadata)) { - var sb = new StringBuilder (); + var sb = StringBuilderCache.Allocate (); for (int n = 0; n < transformItems.Length; n++) { if (n > 0) sb.Append (';'); sb.Append (transformItems[n].Include); } - items = sb.ToString (); + items = StringBuilderCache.ReturnAndFree (sb); return true; } } - var sbi = new StringBuilder (); + var sbi = StringBuilderCache.Allocate (); int count = 0; foreach (var eit in transformItems) { @@ -678,7 +678,7 @@ namespace MonoDevelop.Projects.MSBuild context.ClearItemContext (); } } - items = sbi.ToString (); + items = Core.StringBuilderCache.ReturnAndFree (sbi); return true; } @@ -943,7 +943,7 @@ namespace MonoDevelop.Projects.MSBuild static string ExcludeToRegex (string exclude, bool excludeDirectoriesOnly = false) { exclude = exclude.Replace ('/', '\\').Replace (@"\\", @"\"); - var sb = new StringBuilder (); + var sb = StringBuilderCache.Allocate (); foreach (var ep in exclude.Split (new char [] { ';' }, StringSplitOptions.RemoveEmptyEntries)) { var ex = ep.Trim (); if (excludeDirectoriesOnly) { @@ -977,7 +977,7 @@ namespace MonoDevelop.Projects.MSBuild } sb.Append ('$'); } - return sb.ToString (); + return Core.StringBuilderCache.ReturnAndFree (sb); } static char [] regexEscapeChars = { '\\', '^', '$', '{', '}', '[', ']', '(', ')', '.', '*', '+', '?', '|', '<', '>', '-', '&' }; diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/EscapingUtilities.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/EscapingUtilities.cs index 94a180f36d..803ff6df8a 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/EscapingUtilities.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/EscapingUtilities.cs @@ -5,7 +5,8 @@ using System; using System.Collections.Generic;
using System.Globalization;
using System.Text;
-
+using MonoDevelop.Core; + namespace Microsoft.Build.Shared
{
/// <summary>
@@ -70,7 +71,7 @@ namespace Microsoft.Build.Shared }
// This is where we're going to build up the final string to return to the caller.
- StringBuilder unescapedString = new StringBuilder (escapedString.Length);
+ StringBuilder unescapedString = StringBuilderCache.Allocate ();
int currentPosition = 0;
@@ -112,7 +113,7 @@ namespace Microsoft.Build.Shared // characters into the destination.
unescapedString.Append(escapedString, currentPosition, escapedString.Length - currentPosition);
- return unescapedString.ToString ();
+ return StringBuilderCache.ReturnAndFree (unescapedString);
}
@@ -172,16 +173,16 @@ namespace Microsoft.Build.Shared }
// This is where we're going to build up the final string to return to the caller.
- StringBuilder escapedStringBuilder = new StringBuilder (unescapedString.Length * 2);
+ StringBuilder escapedStringBuilder = StringBuilderCache.Allocate ();
AppendEscapedString(escapedStringBuilder, unescapedString);
if (!cache)
{
- return escapedStringBuilder.ToString ();
+ return StringBuilderCache.ReturnAndFree (escapedStringBuilder);
}
- string escapedString = escapedStringBuilder.ToString ();
+ string escapedString = StringBuilderCache.ReturnAndFree (escapedStringBuilder);
lock (s_unescapedToEscapedStrings)
{
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/IMSBuildPropertySet.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/IMSBuildPropertySet.cs index 76e96caa7b..73990668a0 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/IMSBuildPropertySet.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/IMSBuildPropertySet.cs @@ -228,7 +228,7 @@ namespace MonoDevelop.Projects.MSBuild int i = val.IndexOfAny (new char[] {'\n','\r','\t'}); if (i != -1 || val [0] == '@') { - StringBuilder sb = new StringBuilder (); + StringBuilder sb = StringBuilderCache.Allocate (); if (i != -1) { int fi = val.IndexOf ('\\'); if (fi != -1 && fi < i) i = fi; @@ -248,7 +248,7 @@ namespace MonoDevelop.Projects.MSBuild else sb.Append (c); } - val = "@" + sb.ToString (); + val = "@" + StringBuilderCache.ReturnAndFree (sb); } char fc = val [0]; char lc = val [val.Length - 1]; @@ -283,7 +283,7 @@ namespace MonoDevelop.Projects.MSBuild end--; } if (val [start] == '@') { - StringBuilder sb = new StringBuilder (val.Length); + StringBuilder sb = StringBuilderCache.Allocate (); for (int n = start + 1; n < end; n++) { char c = val [n]; if (c == '\\') { @@ -294,7 +294,7 @@ namespace MonoDevelop.Projects.MSBuild } sb.Append (c); } - return sb.ToString (); + return StringBuilderCache.ReturnAndFree (sb); } else return val.Substring (start, end - start); diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/MSBuildProject.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/MSBuildProject.cs index 72c36e7b45..395321393c 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/MSBuildProject.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/MSBuildProject.cs @@ -1152,7 +1152,7 @@ namespace MonoDevelop.Projects.MSBuild if (elem == null) return ""; var node = elem.PreviousSibling; - StringBuilder res = new StringBuilder (); + StringBuilder res = StringBuilderCache.Allocate (); while (node != null) { var ws = node as XmlWhitespace; @@ -1163,13 +1163,13 @@ namespace MonoDevelop.Projects.MSBuild res.Append (t); } else { res.Append (t, i + 1, t.Length - i - 1); - return res.ToString (); + return StringBuilderCache.ReturnAndFree (res); } } else res.Clear (); node = node.PreviousSibling; } - return res.ToString (); + return StringBuilderCache.ReturnAndFree (res); } public static void Indent (TextFormatInfo format, XmlElement elem, bool closeInNewLine) diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Policies/PolicyService.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Policies/PolicyService.cs index 72e2c2df70..57e57f7ada 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Policies/PolicyService.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Policies/PolicyService.cs @@ -530,7 +530,7 @@ namespace MonoDevelop.Projects.Policies } } - StringBuilder removed = new StringBuilder (); + StringBuilder removed = StringBuilderCache.Allocate (); for (int n=0; n<baseline.ItemData.Count; n++) { DataNode node = baseline.ItemData [n]; if (!extracted.Contains (node)) { @@ -545,6 +545,7 @@ namespace MonoDevelop.Projects.Policies if (removed.Length > 0) newItem.ItemData.Add (new DataValue ("__removed", removed.ToString ()) {StoreAsAttribute = true}); + StringBuilderCache.Free (removed); return newItem; } diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Text/TextFormatter.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Text/TextFormatter.cs index cc1f54ac19..95af55600a 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Text/TextFormatter.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Text/TextFormatter.cs @@ -26,6 +26,7 @@ using System; using System.Text; +using MonoDevelop.Core; namespace MonoDevelop.Projects.Text { @@ -343,10 +344,10 @@ namespace MonoDevelop.Projects.Text void CreateIndentString () { - StringBuilder sb = new StringBuilder (); + StringBuilder sb = StringBuilderCache.Allocate (); indentColumnWidth = AddIndentString (sb, indentString); - - paragFormattedIndentString = sb.ToString () + new string (' ', paragraphStartMargin); + sb.Append (new string (' ', paragraphStartMargin)); + paragFormattedIndentString = StringBuilderCache.ReturnAndFree (sb); paragIndentColumnWidth = indentColumnWidth + paragraphStartMargin; if (LeftMargin > 0) { diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/DotNetProject.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/DotNetProject.cs index 9dee0e5bc1..91b3ee2145 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/DotNetProject.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/DotNetProject.cs @@ -1571,17 +1571,17 @@ namespace MonoDevelop.Projects static string GetHierarchicalNamespace (string relativePath) { - StringBuilder sb = new StringBuilder (relativePath); + StringBuilder sb = StringBuilderCache.Allocate (relativePath); for (int i = 0; i < sb.Length; i++) { if (sb[i] == Path.DirectorySeparatorChar) sb[i] = '.'; } - return sb.ToString (); + return StringBuilderCache.ReturnAndFree (sb); } static string SanitisePotentialNamespace (string potential) { - StringBuilder sb = new StringBuilder (); + StringBuilder sb = StringBuilderCache.Allocate (); foreach (char c in potential) { if (char.IsLetter (c) || c == '_' || (sb.Length > 0 && (char.IsLetterOrDigit (sb[sb.Length - 1]) || sb[sb.Length - 1] == '_') && (c == '.' || char.IsNumber (c)))) { sb.Append (c); @@ -1591,9 +1591,10 @@ namespace MonoDevelop.Projects if (sb[sb.Length - 1] == '.') sb.Remove (sb.Length - 1, 1); - return sb.ToString (); - } else - return null; + return StringBuilderCache.ReturnAndFree (sb); + } + StringBuilderCache.Free (sb); + return null; } void RuntimeSystemAssemblyServiceDefaultRuntimeChanged (object sender, EventArgs e) diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/MonoExecutionParameters.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/MonoExecutionParameters.cs index b37e4343d6..f172182f44 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/MonoExecutionParameters.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/MonoExecutionParameters.cs @@ -269,7 +269,7 @@ namespace MonoDevelop.Projects public string GenerateDescription () { - StringBuilder ops = new StringBuilder (); + StringBuilder ops = StringBuilderCache.Allocate (); foreach (var kvp in itemPropertyAttributes) { var prop = kvp.Key; @@ -286,7 +286,7 @@ namespace MonoDevelop.Projects ops.Append (": ").Append (GetValue (pval)); } } - return ops.ToString (); + return StringBuilderCache.ReturnAndFree (ops); } public MonoExecutionParameters Clone () { |