From 742953e4934234c7fd650eab1e8d26ac6ff94519 Mon Sep 17 00:00:00 2001 From: Michael Krisper <michael.krisper@tugraz.at> Date: Tue, 11 Oct 2016 12:39:09 +0200 Subject: [PATCH] VectoCSVFile: Faster writing of CSV files --- VectoCore/VectoCore/Utils/VectoCSVFile.cs | 31 +++++++++++++---------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/VectoCore/VectoCore/Utils/VectoCSVFile.cs b/VectoCore/VectoCore/Utils/VectoCSVFile.cs index 7148af4483..5f3b6d2196 100644 --- a/VectoCore/VectoCore/Utils/VectoCSVFile.cs +++ b/VectoCore/VectoCore/Utils/VectoCSVFile.cs @@ -198,20 +198,25 @@ namespace TUGraz.VectoCore.Utils var header = table.Columns.Cast<DataColumn>().Select(col => col.Caption ?? col.ColumnName); writer.WriteLine(string.Join(Delimiter, header)); - foreach (DataRow row in table.Rows) { - var row1 = row; - var formattedList = table.Columns.Cast<DataColumn>().Select(col => { - var item = row1[col]; - var decimals = (uint?)col.ExtendedProperties["decimals"]; - var outputFactor = (double?)col.ExtendedProperties["outputFactor"]; - var showUnit = (bool?)col.ExtendedProperties["showUnit"]; - - var si = item as SI; - return si != null - ? si.ToOutputFormat(decimals, outputFactor, showUnit) - : string.Format(CultureInfo.InvariantCulture, "{0}", item); - }); + var columnFormatter = new Func<SI, string>[table.Columns.Count]; + for (var i = 0; i < table.Columns.Count; i++) { + var col = table.Columns[i]; + var decimals = (uint?)col.ExtendedProperties["decimals"]; + var outputFactor = (double?)col.ExtendedProperties["outputFactor"]; + var showUnit = (bool?)col.ExtendedProperties["showUnit"]; + + columnFormatter[i] = item => item.ToOutputFormat(decimals, outputFactor, showUnit); + } + foreach (DataRow row in table.Rows) { + var items = row.ItemArray; + var formattedList = new string[items.Length]; + for (var i = 0; i < items.Length; i++) { + var si = items[i] as SI; + formattedList[i] = si != null + ? columnFormatter[i](si) + : formattedList[i] = string.Format(CultureInfo.InvariantCulture, "{0}", items[i]); + } writer.WriteLine(string.Join(Delimiter, formattedList)); } } -- GitLab