Reduce IList interface calls

This commit is contained in:
Ben Adams 2018-08-29 03:32:20 +01:00 committed by Pranav K
parent 82a01a414d
commit 7bd9f9cc3e
2 changed files with 19 additions and 12 deletions

View File

@ -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);

View File

@ -11,6 +11,7 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal
{
public const int PageSize = 1024;
private int _charIndex;
private List<char[]> _pages = new List<char[]>();
public PagedCharBuffer(ICharBufferSource bufferSource)
{
@ -19,16 +20,18 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal
public ICharBufferSource BufferSource { get; }
public IList<char[]> Pages { get; } = new List<char[]>();
public IList<char[]> 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
/// </summary>
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();
}
}
}