Skip to content

Instantly share code, notes, and snippets.

@arekbal
Created October 22, 2018 17:31
Show Gist options
  • Save arekbal/0435367c34988d3736c0d9f4b04a2324 to your computer and use it in GitHub Desktop.
Save arekbal/0435367c34988d3736c0d9f4b04a2324 to your computer and use it in GitHub Desktop.
public class list_vs_array
{
int[] data;
List<int> list;
int calcSum;
public list_vs_array()
{
data = Enumerable.Range(1, 999).ToArray();
list = new List<int>(data);
var length = data.Length;
for (var i = 0; i < length; i++)
calcSum += data[i];
}
[Benchmark]
public void array_by_index()
{
var sum = 0;
var length = data.Length;
for (var i = 0; i < length; i++)
sum += data[i];
if (calcSum != sum)
throw new Exception("calcSum != sum");
}
[Benchmark(Baseline = true)]
public void array_by_enumerator()
{
var sum = 0;
var length = data.Length;
foreach (var item in data)
{
sum += item;
}
if (calcSum != sum)
throw new Exception("calcSum != sum");
}
[Benchmark]
public void list_by_index()
{
var sum = 0;
var length = list.Count;
for (var i = 0; i < length; i++)
sum += list[i];
if (calcSum != sum)
throw new Exception("calcSum != sum");
}
[Benchmark]
public void list_by_enumerator()
{
var sum = 0;
var length = list.Count;
foreach (var item in list)
{
sum += item;
}
if (calcSum != sum)
throw new Exception("calcSum != sum");
}
[Benchmark]
public void list_by_array_index()
{
var sum = 0;
var length = list.Count;
for (var i = 0; i < length; i++)
sum += list._items[i];
if (calcSum != sum)
throw new Exception("calcSum != sum");
}
[Benchmark]
public void list_by_span_index()
{
var sum = 0;
var length = list.Count;
var items = new Span<int>(list._items, 0, length);
for (var i = 0; i < length; i++)
sum += items[i];
if (calcSum != sum)
throw new Exception("calcSum != sum");
}
[Benchmark]
public void list_by_span_enumerator()
{
var sum = 0;
var length = list.Count;
var items = new Span<int>(list._items, 0, length);
foreach (var item in items)
{
sum += item;
}
if (calcSum != sum)
throw new Exception("calcSum != sum");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment