Improve performance and reduce memory use and reduce array allocations by reusing char[] (#9166)

* Reduce array allocations by reusing char[]

* don't hide .Equals()

* Reduce memory use by reducing array allocations

* Revert "Reduce memory use by reducing array allocations"

This reverts commit faf6b60234167f5443435243eb52187ab07d514c.

* reuse char[] for string.split() to avoid params [] allocation
This commit is contained in:
Chad
2021-01-22 15:02:25 +13:00
committed by GitHub
parent 335c6b17b9
commit 0bd4dced0b
97 changed files with 310 additions and 167 deletions

View File

@@ -33,7 +33,7 @@ namespace Umbraco.Core.IO
_rootPath = EnsureDirectorySeparatorChar(IOHelper.MapPath(virtualRoot)).TrimEnd(Path.DirectorySeparatorChar);
_rootPathFwd = EnsureUrlSeparatorChar(_rootPath);
_rootUrl = EnsureUrlSeparatorChar(IOHelper.ResolveUrl(virtualRoot)).TrimEnd('/');
_rootUrl = EnsureUrlSeparatorChar(IOHelper.ResolveUrl(virtualRoot)).TrimEnd(Constants.CharArrays.ForwardSlash);
}
public PhysicalFileSystem(string rootPath, string rootUrl)
@@ -54,7 +54,7 @@ namespace Umbraco.Core.IO
_rootPath = EnsureDirectorySeparatorChar(rootPath).TrimEnd(Path.DirectorySeparatorChar);
_rootPathFwd = EnsureUrlSeparatorChar(_rootPath);
_rootUrl = EnsureUrlSeparatorChar(rootUrl).TrimEnd('/');
_rootUrl = EnsureUrlSeparatorChar(rootUrl).TrimEnd(Constants.CharArrays.ForwardSlash);
}
/// <summary>
@@ -259,12 +259,12 @@ namespace Umbraco.Core.IO
// if it starts with the root URL, strip it and trim the starting slash to make it relative
// eg "/Media/1234/img.jpg" => "1234/img.jpg"
if (IOHelper.PathStartsWith(path, _rootUrl, '/'))
return path.Substring(_rootUrl.Length).TrimStart('/');
return path.Substring(_rootUrl.Length).TrimStart(Constants.CharArrays.ForwardSlash);
// if it starts with the root path, strip it and trim the starting slash to make it relative
// eg "c:/websites/test/root/Media/1234/img.jpg" => "1234/img.jpg"
if (IOHelper.PathStartsWith(path, _rootPathFwd, '/'))
return path.Substring(_rootPathFwd.Length).TrimStart('/');
return path.Substring(_rootPathFwd.Length).TrimStart(Constants.CharArrays.ForwardSlash);
// unchanged - what else?
return path;
@@ -326,7 +326,7 @@ namespace Umbraco.Core.IO
/// <remarks>All separators are forward-slashes.</remarks>
public string GetUrl(string path)
{
path = EnsureUrlSeparatorChar(path).Trim('/');
path = EnsureUrlSeparatorChar(path).Trim(Constants.CharArrays.ForwardSlash);
return _rootUrl + "/" + path;
}