private void Start(DiagnoserActionParameters parameters) { var counters = benchmarkToCounters[parameters.BenchmarkCase] = parameters.Config .GetHardwareCounters() .Select(counter => HardwareCounters.FromCounter(counter, config.IntervalSelectors.TryGetValue(counter, out var selector) ? selector : GetInterval)) .ToArray(); if (counters.Any()) // we need to enable the counters before starting the kernel session { HardwareCounters.Enable(counters); } try { kernelSession = new KernelSession(parameters, config, CreationTime).EnableProviders(); if (config.CreateHeapSession) { heapSession = new HeapSession(parameters, config, CreationTime).EnableProviders(); } userSession = new UserSession(parameters, config, CreationTime).EnableProviders(); } catch (Exception) { userSession?.Dispose(); heapSession?.Dispose(); kernelSession?.Dispose(); throw; } }
private void Stop(DiagnoserActionParameters parameters) { WaitForDelayedEvents(); try { kernelSession.Stop(); userSession.Stop(); benchmarkToEtlFile[parameters.BenchmarkCase] = userSession.MergeFiles(kernelSession); } finally { kernelSession.Dispose(); userSession.Dispose(); } }
private void OnConsoleCancelKeyPress(object sender, ConsoleCancelEventArgs e) => Session?.Dispose();
private void OnProcessExit(object sender, EventArgs e) => Session?.Dispose();
protected void Stop() { WaitForDelayedEvents(); Session.Dispose(); }