From 9019ac39ae5e359d1a576703aee3452d9308158a Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Sat, 26 Dec 2015 07:36:57 +0000 Subject: [PATCH] Faster Take --- .../Infrastructure/MemoryPoolIterator2.cs | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/Microsoft.AspNet.Server.Kestrel/Infrastructure/MemoryPoolIterator2.cs b/src/Microsoft.AspNet.Server.Kestrel/Infrastructure/MemoryPoolIterator2.cs index 08c4a75a35..465f1a7b82 100644 --- a/src/Microsoft.AspNet.Server.Kestrel/Infrastructure/MemoryPoolIterator2.cs +++ b/src/Microsoft.AspNet.Server.Kestrel/Infrastructure/MemoryPoolIterator2.cs @@ -59,26 +59,23 @@ namespace Microsoft.AspNet.Server.Kestrel.Infrastructure public int Take() { - if (_block == null) + var block = _block; + if (block == null) { return -1; } - else if (_index < _block.End) + + var index = _index; + + if (index < block.End) { - return _block.Array[_index++]; + _index = index + 1; + return block.Array[index]; } - var block = _block; - var index = _index; - while (true) + do { - if (index < block.End) - { - _block = block; - _index = index + 1; - return block.Array[index]; - } - else if (block.Next == null) + if (block.Next == null) { return -1; } @@ -87,7 +84,14 @@ namespace Microsoft.AspNet.Server.Kestrel.Infrastructure block = block.Next; index = block.Start; } - } + + if (index < block.End) + { + _block = block; + _index = index + 1; + return block.Array[index]; + } + } while (true); } public int Peek()