From 7bd9f9cc3e11c0e9686453f4cad21ac6bf7ff04a Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Wed, 29 Aug 2018 03:32:20 +0100 Subject: [PATCH] Reduce IList interface calls --- .../Internal/PagedBufferedTextWriter.cs | 3 +- .../Internal/PagedCharBuffer.cs | 28 +++++++++++-------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/Microsoft.AspNetCore.Mvc.ViewFeatures/Internal/PagedBufferedTextWriter.cs b/src/Microsoft.AspNetCore.Mvc.ViewFeatures/Internal/PagedBufferedTextWriter.cs index 5dce67153b..9148831b6e 100644 --- a/src/Microsoft.AspNetCore.Mvc.ViewFeatures/Internal/PagedBufferedTextWriter.cs +++ b/src/Microsoft.AspNetCore.Mvc.ViewFeatures/Internal/PagedBufferedTextWriter.cs @@ -37,7 +37,8 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal } var pages = _charBuffer.Pages; - for (var i = 0; i < pages.Count; i++) + var count = pages.Count; + for (var i = 0; i < count; i++) { var page = pages[i]; var pageLength = Math.Min(length, page.Length); diff --git a/src/Microsoft.AspNetCore.Mvc.ViewFeatures/Internal/PagedCharBuffer.cs b/src/Microsoft.AspNetCore.Mvc.ViewFeatures/Internal/PagedCharBuffer.cs index f086daf67b..12dcce04ea 100644 --- a/src/Microsoft.AspNetCore.Mvc.ViewFeatures/Internal/PagedCharBuffer.cs +++ b/src/Microsoft.AspNetCore.Mvc.ViewFeatures/Internal/PagedCharBuffer.cs @@ -11,6 +11,7 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal { public const int PageSize = 1024; private int _charIndex; + private List _pages = new List(); public PagedCharBuffer(ICharBufferSource bufferSource) { @@ -19,16 +20,18 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal public ICharBufferSource BufferSource { get; } - public IList Pages { get; } = new List(); + public IList Pages => _pages; public int Length { get { var length = _charIndex; - for (var i = 0; i < Pages.Count - 1; i++) + var pages = _pages; + var fullPages = pages.Count - 1; + for (var i = 0; i < fullPages; i++) { - length += Pages[i].Length; + length += pages[i].Length; } return length; @@ -100,13 +103,14 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal /// public void Clear() { - for (var i = Pages.Count - 1; i > 0; i--) + var pages = _pages; + for (var i = pages.Count - 1; i > 0; i--) { - var page = Pages[i]; + var page = pages[i]; try { - Pages.RemoveAt(i); + pages.RemoveAt(i); } finally { @@ -115,7 +119,7 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal } _charIndex = 0; - CurrentPage = Pages.Count > 0 ? Pages[0] : null; + CurrentPage = pages.Count > 0 ? pages[0] : null; } private char[] GetCurrentPage() @@ -135,7 +139,7 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal try { page = BufferSource.Rent(PageSize); - Pages.Add(page); + _pages.Add(page); } catch when (page != null) { @@ -148,12 +152,14 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal public void Dispose() { - for (var i = 0; i < Pages.Count; i++) + var pages = _pages; + var count = pages.Count; + for (var i = 0; i < count; i++) { - BufferSource.Return(Pages[i]); + BufferSource.Return(pages[i]); } - Pages.Clear(); + pages.Clear(); } } }