Skip to content

Instantly share code, notes, and snippets.

@lahma
Last active January 8, 2019 20:55
Show Gist options
  • Select an option

  • Save lahma/156bc7e20de19b881a6fa40342d2d365 to your computer and use it in GitHub Desktop.

Select an option

Save lahma/156bc7e20de19b881a6fa40342d2d365 to your computer and use it in GitHub Desktop.
Esprima.Ast.List<T> vs System.Collections.Generic.List<T>
using BenchmarkDotNet.Attributes;
namespace Esprima.Benchmark
{
[MemoryDiagnoser]
public class ListBenchmark
{
private const int Size = 10_000;
private Ast.List<int> _astList;
private System.Collections.Generic.List<int> _bclList;
[GlobalSetup]
public void OneTimeSetup()
{
_astList = new Ast.List<int>();
for (var i = 0; i < Size; ++i) _astList.Add(i);
_bclList = new System.Collections.Generic.List<int>();
for (var i = 0; i < Size; ++i) _bclList.Add(i);
}
[Benchmark]
public Ast.List<int> AstListAdd()
{
var items = new Ast.List<int>();
for (var i = 0; i < Size; ++i) items.Add(i);
return items;
}
[Benchmark]
public System.Collections.Generic.List<int> BclListAdd()
{
var items = new System.Collections.Generic.List<int>();
for (var i = 0; i < Size; ++i) items.Add(i);
return items;
}
[Benchmark]
public int AstListFor()
{
var sum = 0;
for (var i = 0; i < _astList.Count; ++i) sum += _astList[i];
return sum;
}
[Benchmark]
public int BclListFor()
{
var sum = 0;
for (var i = 0; i < _bclList.Count; ++i) sum += _bclList[i];
return sum;
}
[Benchmark]
public int AstListAddAndFor()
{
var items = new Ast.List<int>();
for (var i = 0; i < Size; ++i) items.Add(i);
var sum = 0;
for (var i = 0; i < items.Count; ++i) sum += items[i];
return sum;
}
[Benchmark]
public int BclListAddAndFor()
{
var items = new System.Collections.Generic.List<int>();
for (var i = 0; i < Size; ++i) items.Add(i);
var sum = 0;
for (var i = 0; i < items.Count; ++i) sum += items[i];
return sum;
}
[Benchmark]
public int AstListAddAndForEach()
{
var items = new Ast.List<int>();
for (var i = 0; i < Size; ++i) items.Add(i);
var sum = 0;
foreach (var t in items) sum += t;
return sum;
}
[Benchmark]
public int BclListAddAndForEach()
{
var items = new System.Collections.Generic.List<int>();
for (var i = 0; i < Size; ++i) items.Add(i);
var sum = 0;
foreach (var t in items) sum += t;
return sum;
}
[Benchmark]
public int AstListForEach()
{
var sum = 0;
foreach (var t in _astList) sum += t;
return sum;
}
[Benchmark]
public int BclListForEach()
{
var sum = 0;
foreach (var t in _bclList) sum += t;
return sum;
}
}
}
BenchmarkDotNet=v0.11.3, OS=Windows 10.0.17763.195 (1809/October2018Update/Redstone5)
Intel Core i7-6820HQ CPU 2.70GHz (Skylake), 1 CPU, 8 logical and 4 physical cores
.NET Core SDK=2.2.101
  [Host]     : .NET Core 2.1.6 (CoreCLR 4.6.27019.06, CoreFX 4.6.27019.05), 64bit RyuJIT
  DefaultJob : .NET Core 2.1.6 (CoreCLR 4.6.27019.06, CoreFX 4.6.27019.05), 64bit RyuJIT

Method Mean Error StdDev Gen 0/1k Op Gen 1/1k Op Gen 2/1k Op Allocated Memory/Op
AstListAdd 36.29 us 0.0758 us 0.0709 us 31.1890 - - 131368 B
BclListAdd 26.62 us 0.0272 us 0.0227 us 31.2195 7.7820 - 131408 B
AstListFor 10.15 us 0.0300 us 0.0280 us - - - -
BclListFor 11.87 us 0.0126 us 0.0112 us - - - -
AstListAddAndFor 43.18 us 0.1492 us 0.1395 us 31.1890 - - 131368 B
BclListAddAndFor 32.44 us 0.0319 us 0.0283 us 31.1890 - - 131408 B
AstListAddAndForEach 90.32 us 0.1534 us 0.1360 us 31.1279 - - 131416 B
BclListAddAndForEach 47.44 us 0.1276 us 0.1131 us 31.1890 - - 131408 B
AstListForEach 62.91 us 0.2102 us 0.1967 us - - - 48 B
BclListForEach 22.26 us 0.0281 us 0.0263 us - - - -
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment