using System;
using System.Linq;
using System.Collections.Generic;
using System.Diagnostics;
public class MyObject {
public MyObject()
{
}
public MyObject(int myProperty1, int myProperty2, int myProperty3)
{
MyProperty1 = myProperty1;
MyProperty2 = myProperty2;
MyProperty3 = myProperty3;
}
public int MyProperty1 { get; set; }
public int MyProperty2 { get; set; }
public int MyProperty3 { get; set; }
}
public class Test
{
public static void Main()
{
var myObjects = new List<MyObject>();
var random = new Random();
for (var i = 0; i < 1000000; i++)
{
myObjects.Add(new MyObject(random.Next(), random.Next(), random.Next()));
}
var sw = new Stopwatch();
sw.Start();
var summed = myObjects.Aggregate(new MyObject(), (acc, x) =>
{
acc.MyProperty1 += x.MyProperty1;
acc.MyProperty2 += x.MyProperty2;
acc.MyProperty3 += x.MyProperty3;
return acc;
});
sw.Stop();
var t1 = sw.ElapsedMilliseconds;
sw.Reset();
sw.Start();
var summed2 = new MyObject();
foreach (var obj in myObjects)
{
summed2.MyProperty1 += obj.MyProperty1;
summed2.MyProperty2 += obj.MyProperty2;
summed2.MyProperty3 += obj.MyProperty3;
}
sw.Stop();
var t2 = sw.ElapsedMilliseconds;
sw.Reset();
Console.WriteLine("Aggregate: " + t1 + "ms");
Console.WriteLine("foreach: " + t2 + "ms");
}
}