// TODO: rewrite without allocations public IEnumerable<Measurement> GetMeasurements() { double overhead = Idle == null ? 0.0 : new Statistics(Idle.Select(m => m.Nanoseconds)).Mean; var mainStats = new Statistics(Main.Select(m => m.Nanoseconds)); int resultIndex = 0; foreach (var measurement in Main) { if (removeOutliers && mainStats.IsOutlier(measurement.Nanoseconds)) continue; double value = Math.Max(0, measurement.Nanoseconds - overhead); if (IsSuspiciouslySmall(value)) value = 0; yield return new Measurement( measurement.LaunchIndex, IterationMode.Result, ++resultIndex, measurement.Operations, value); } }