Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Linq;
- using NBench;
- namespace Tests
- {
- public class GCCollection
- {
- private IList<string> _list;
- [PerfSetup]
- public void Setup(BenchmarkContext context)
- {
- _list = GenerateObjects(20*1000*1000);
- }
- [PerfBenchmark(Description = "Gen 0 collection",NumberOfIterations = 1, RunMode = RunMode.Iterations,TestMode = TestMode.Test)]
- [GcTotalAssertion(GcMetric.TotalCollections, GcGeneration.Gen0, MustBe.ExactlyEqualTo, 1d)]
- [GcTotalAssertion(GcMetric.TotalCollections, GcGeneration.Gen1, MustBe.ExactlyEqualTo, 0.0d)]
- [GcTotalAssertion(GcMetric.TotalCollections, GcGeneration.Gen2, MustBe.ExactlyEqualTo, 0.0d)]
- public void Gen0Collection()
- {
- var testList = _list.ToList();
- testList = null;
- var sw = Stopwatch.StartNew();
- GC.Collect(0);
- GC.WaitForFullGCComplete();
- sw.Stop();
- Console.WriteLine("Gen0 StopWatch time:"+sw.ElapsedTicks);
- }
- [PerfBenchmark(Description = "Gen 1 collection", NumberOfIterations = 1, RunMode = RunMode.Iterations, TestMode = TestMode.Test)]
- [GcTotalAssertion(GcMetric.TotalCollections, GcGeneration.Gen0, MustBe.ExactlyEqualTo, 2.0d)]
- [GcTotalAssertion(GcMetric.TotalCollections, GcGeneration.Gen1, MustBe.ExactlyEqualTo, 1.0d)]
- [GcTotalAssertion(GcMetric.TotalCollections, GcGeneration.Gen2, MustBe.ExactlyEqualTo, 0.0d)]
- public void Gen1Collection()
- {
- var testList = _list.ToList();
- var sw = Stopwatch.StartNew();
- GC.Collect(0);
- Console.WriteLine("Gen0 StopWatch time:" + sw.ElapsedTicks);
- testList = null;
- sw.Restart();
- GC.Collect(1);
- GC.WaitForFullGCComplete();
- sw.Stop();
- Console.WriteLine("Gen 0+1 StopWatch time:" + sw.ElapsedTicks);
- }
- [PerfBenchmark(Description = "Gen 2 collection", NumberOfIterations = 1, RunMode = RunMode.Iterations, TestMode = TestMode.Test)]
- [GcTotalAssertion(GcMetric.TotalCollections, GcGeneration.Gen0, MustBe.ExactlyEqualTo, 3.0d)]
- [GcTotalAssertion(GcMetric.TotalCollections, GcGeneration.Gen1, MustBe.ExactlyEqualTo, 2.0d)]
- [GcTotalAssertion(GcMetric.TotalCollections, GcGeneration.Gen2, MustBe.ExactlyEqualTo, 1.0d)]
- public void Gen2Collection()
- {
- var testList = _list.ToList();
- var sw = Stopwatch.StartNew();
- GC.Collect(0);
- GC.WaitForFullGCComplete();
- Console.WriteLine("Gen0 StopWatch time:" + sw.ElapsedTicks);
- sw.Restart();
- GC.Collect(1);
- GC.WaitForFullGCComplete();
- Console.WriteLine("Gen1 StopWatch time:" + sw.ElapsedTicks);
- testList = null;
- sw.Restart();
- GC.Collect(2);
- GC.WaitForFullGCComplete();
- Console.WriteLine("Gen 0+1+2 StopWatch time:" + sw.ElapsedTicks);
- }
- private IList<string> GenerateObjects(long count)
- {
- var ret = new List<string>();
- for (int i = 0; i < count; i++)
- {
- ret.Add(Guid.NewGuid().ToString());
- }
- return ret;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement