public void Start()
 {
     allocatedBytesAtStart = GC.GetTotalMemory(true);
     gc0CountAtStart       = GC.CollectionCount(0);
     gc1CountAtStart       = GC.CollectionCount(1);
     gc2CountAtStart       = GC.CollectionCount(2);
     stopwatchAtStart      = Stopwatch.GetTimestamp();
     cpuCyclesAtStart      = CpuProfiler.GetCurrentProcessCpuCycles();
 }
        public PerformanceSummary Stop()
        {
            var elapsedTicks        = Stopwatch.GetTimestamp() - stopwatchAtStart;
            var elapsedMilliseconds = (elapsedTicks * 1000) / Stopwatch.Frequency;
            var cpuCycles           = CpuProfiler.GetCurrentProcessCpuCycles() - cpuCyclesAtStart;
            var allocatedBytes      = GC.GetTotalMemory(true) - allocatedBytesAtStart;
            var gc0Count            = GC.CollectionCount(0) - gc0CountAtStart;
            var gc1Count            = GC.CollectionCount(1) - gc1CountAtStart;
            var gc2Count            = GC.CollectionCount(2) - gc2CountAtStart;

            return(new PerformanceSummary(
                       this.contextName,
                       elapsedMilliseconds,
                       cpuCycles,
                       allocatedBytes,
                       gc0Count,
                       gc1Count,
                       gc2Count));
        }