Advertisement
Guest User

Untitled

a guest
Jun 29th, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.32 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.Linq;
  5. using NBench;
  6.  
  7. namespace Tests
  8. {
  9. public class GCCollection
  10. {
  11. private IList<string> _list;
  12. [PerfSetup]
  13. public void Setup(BenchmarkContext context)
  14. {
  15. _list = GenerateObjects(20*1000*1000);
  16. }
  17.  
  18. [PerfBenchmark(Description = "Gen 0 collection",NumberOfIterations = 1, RunMode = RunMode.Iterations,TestMode = TestMode.Test)]
  19. [GcTotalAssertion(GcMetric.TotalCollections, GcGeneration.Gen0, MustBe.ExactlyEqualTo, 1d)]
  20. [GcTotalAssertion(GcMetric.TotalCollections, GcGeneration.Gen1, MustBe.ExactlyEqualTo, 0.0d)]
  21. [GcTotalAssertion(GcMetric.TotalCollections, GcGeneration.Gen2, MustBe.ExactlyEqualTo, 0.0d)]
  22. public void Gen0Collection()
  23. {
  24. var testList = _list.ToList();
  25. testList = null;
  26. var sw = Stopwatch.StartNew();
  27.  
  28. GC.Collect(0);
  29. GC.WaitForFullGCComplete();
  30. sw.Stop();
  31. Console.WriteLine("Gen0 StopWatch time:"+sw.ElapsedTicks);
  32. }
  33.  
  34.  
  35. [PerfBenchmark(Description = "Gen 1 collection", NumberOfIterations = 1, RunMode = RunMode.Iterations, TestMode = TestMode.Test)]
  36. [GcTotalAssertion(GcMetric.TotalCollections, GcGeneration.Gen0, MustBe.ExactlyEqualTo, 2.0d)]
  37. [GcTotalAssertion(GcMetric.TotalCollections, GcGeneration.Gen1, MustBe.ExactlyEqualTo, 1.0d)]
  38. [GcTotalAssertion(GcMetric.TotalCollections, GcGeneration.Gen2, MustBe.ExactlyEqualTo, 0.0d)]
  39. public void Gen1Collection()
  40. {
  41. var testList = _list.ToList();
  42. var sw = Stopwatch.StartNew();
  43. GC.Collect(0);
  44. Console.WriteLine("Gen0 StopWatch time:" + sw.ElapsedTicks);
  45.  
  46. testList = null;
  47. sw.Restart();
  48. GC.Collect(1);
  49. GC.WaitForFullGCComplete();
  50. sw.Stop();
  51. Console.WriteLine("Gen 0+1 StopWatch time:" + sw.ElapsedTicks);
  52. }
  53.  
  54. [PerfBenchmark(Description = "Gen 2 collection", NumberOfIterations = 1, RunMode = RunMode.Iterations, TestMode = TestMode.Test)]
  55. [GcTotalAssertion(GcMetric.TotalCollections, GcGeneration.Gen0, MustBe.ExactlyEqualTo, 3.0d)]
  56. [GcTotalAssertion(GcMetric.TotalCollections, GcGeneration.Gen1, MustBe.ExactlyEqualTo, 2.0d)]
  57. [GcTotalAssertion(GcMetric.TotalCollections, GcGeneration.Gen2, MustBe.ExactlyEqualTo, 1.0d)]
  58. public void Gen2Collection()
  59. {
  60. var testList = _list.ToList();
  61. var sw = Stopwatch.StartNew();
  62. GC.Collect(0);
  63. GC.WaitForFullGCComplete();
  64. Console.WriteLine("Gen0 StopWatch time:" + sw.ElapsedTicks);
  65.  
  66. sw.Restart();
  67. GC.Collect(1);
  68. GC.WaitForFullGCComplete();
  69. Console.WriteLine("Gen1 StopWatch time:" + sw.ElapsedTicks);
  70.  
  71. testList = null;
  72. sw.Restart();
  73. GC.Collect(2);
  74. GC.WaitForFullGCComplete();
  75. Console.WriteLine("Gen 0+1+2 StopWatch time:" + sw.ElapsedTicks);
  76. }
  77.  
  78. private IList<string> GenerateObjects(long count)
  79. {
  80. var ret = new List<string>();
  81. for (int i = 0; i < count; i++)
  82. {
  83. ret.Add(Guid.NewGuid().ToString());
  84. }
  85. return ret;
  86. }
  87. }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement