fork download
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4. using System.Diagnostics;
  5.  
  6. public class MyObject {
  7. public MyObject()
  8. {
  9. }
  10.  
  11. public MyObject(int myProperty1, int myProperty2, int myProperty3)
  12. {
  13. MyProperty1 = myProperty1;
  14. MyProperty2 = myProperty2;
  15. MyProperty3 = myProperty3;
  16. }
  17.  
  18. public int MyProperty1 { get; set; }
  19. public int MyProperty2 { get; set; }
  20. public int MyProperty3 { get; set; }
  21. }
  22.  
  23. public class Test
  24. {
  25. public static void Main()
  26. {
  27. var myObjects = new List<MyObject>();
  28. var random = new Random();
  29. for (var i = 0; i < 1000000; i++)
  30. {
  31. myObjects.Add(new MyObject(random.Next(), random.Next(), random.Next()));
  32. }
  33.  
  34. var sw = new Stopwatch();
  35. sw.Start();
  36. var summed = myObjects.Aggregate(new MyObject(), (acc, x) =>
  37. {
  38. acc.MyProperty1 += x.MyProperty1;
  39. acc.MyProperty2 += x.MyProperty2;
  40. acc.MyProperty3 += x.MyProperty3;
  41. return acc;
  42. });
  43. sw.Stop();
  44. var t1 = sw.ElapsedMilliseconds;
  45. sw.Reset();
  46.  
  47. sw.Start();
  48. var summed2 = new MyObject();
  49. foreach (var obj in myObjects)
  50. {
  51. summed2.MyProperty1 += obj.MyProperty1;
  52. summed2.MyProperty2 += obj.MyProperty2;
  53. summed2.MyProperty3 += obj.MyProperty3;
  54. }
  55. sw.Stop();
  56. var t2 = sw.ElapsedMilliseconds;
  57. sw.Reset();
  58.  
  59. Console.WriteLine("Aggregate: " + t1 + "ms");
  60. Console.WriteLine("foreach: " + t2 + "ms");
  61.  
  62. }
  63. }
Success #stdin #stdout 0.16s 58740KB
stdin
Standard input is empty
stdout
Aggregate: 15ms
foreach:   7ms