Microsoft.Xunit.Performance.Api.Table.DataTable.WriteToCSV C# (CSharp) Method

WriteToCSV() public method

public WriteToCSV ( string fullFilePath ) : void
fullFilePath string
return void
        public void WriteToCSV(string fullFilePath)
        {
            using (CSVFile outFile = new CSVFile(fullFilePath))
            {
                // Write the columns.
                string[] columnNames = _ColumnNames.Select(c => c.Name).ToArray();
                outFile.WriteLine(columnNames);

                // Write out each row.
                foreach (Row r in Rows)
                {
                    string[] rowValues = new string[_ColumnNames.Names.Count];
                    for (int i = 0; i < _ColumnNames.Names.Count; i++)
                    {
                        rowValues[i] = r[_ColumnNames.Names.ElementAtOrDefault(i)];
                    }

                    outFile.WriteLine(rowValues);
                }
            }
        }

Usage Example

        /// <summary>
        /// Generate CSV data (Probably not the most efficient way, e.g. How big can this become).
        /// </summary>
        /// <param name="reader"></param>
        private void WriteStatisticsToFile(CSVMetricReader reader)
        {
            var statisticsFilePath = $"{Configuration.RunId}-Statistics.csv";
            var statisticsTable = new DataTable();
            var col0_testName = statisticsTable.AddColumn("Test Name");
            var col1_metric = statisticsTable.AddColumn("Metric");
            var col2_iterations = statisticsTable.AddColumn("Iterations");
            var col3_average = statisticsTable.AddColumn("Average");
            var col4_stdevs = statisticsTable.AddColumn("Sample standard deviation");
            var col5_min = statisticsTable.AddColumn("Minimum");
            var col6_max = statisticsTable.AddColumn("Maximum");

            foreach (var testCaseName in reader.TestCases)
            {
                List<Dictionary<string, double>> iterations = reader.GetValues(testCaseName);

                var measurements = new Dictionary<string, List<double>>();
                foreach (var dict in iterations)
                {
                    foreach (var pair in dict)
                    {
                        if (!measurements.ContainsKey(pair.Key))
                            measurements[pair.Key] = new List<double>();
                        measurements[pair.Key].Add(pair.Value);
                    }
                }

                foreach (var measurement in measurements)
                {
                    var metric = measurement.Key;
                    var count = measurement.Value.Count;
                    var avg = measurement.Value.Average();
                    var stdev_s = Math.Sqrt(measurement.Value.Sum(x => Math.Pow(x - avg, 2)) / (measurement.Value.Count - 1));
                    var max = measurement.Value.Max();
                    var min = measurement.Value.Min();

                    var r = statisticsTable.AppendRow();
                    r[col0_testName] = testCaseName;
                    r[col1_metric] = metric;
                    r[col2_iterations] = count.ToString();
                    r[col3_average] = avg.ToString();
                    r[col4_stdevs] = stdev_s.ToString();
                    r[col5_min] = min.ToString();
                    r[col6_max] = max.ToString();
                }
            }

            statisticsTable.WriteToCSV(statisticsFilePath);
            Console.WriteLine($"\nStatistics written to \"{statisticsFilePath}\"\n");
        }