Skip to content
This repository has been archived by the owner on Jan 23, 2023. It is now read-only.

Commit

Permalink
Faster List Add
Browse files Browse the repository at this point in the history
  • Loading branch information
benaadams committed Feb 22, 2017
1 parent 0b4e58a commit 9c8554a
Showing 1 changed file with 25 additions and 4 deletions.
29 changes: 25 additions & 4 deletions src/mscorlib/src/System/Collections/Generic/List.cs
Expand Up @@ -207,11 +207,32 @@ public class List<T> : IList<T>, System.Collections.IList, IReadOnlyList<T>
// Adds the given object to the end of this list. The size of the list is
// increased by one. If required, the capacity of the list is doubled
// before adding the new element.
//
public void Add(T item) {
if (_size == _items.Length) EnsureCapacity(_size + 1);
_items[_size++] = item;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Add(T item)
{
var array = _items;
var size = _size;
_version++;
if (size < array.Length)
{
_size = size + 1;
array[size] = item;
}
else
{
AddWithResize(item);
}
}

// Non-inline from List.Add to improve its code quality as uncommon path
[MethodImpl(MethodImplOptions.NoInlining)]
private void AddWithResize(T item)
{
var size = _size;
_version++;
_size = size + 1;
EnsureCapacity(size + 1);
_items[size] = item;
}

int System.Collections.IList.Add(Object item)
Expand Down

0 comments on commit 9c8554a

Please sign in to comment.