我正在使用 C# 4.0。我正在对 a 的每一行执行一堆计算System.Data.DataTable
。我不能给出实际的代码,但它归结为这样的东西:
DataTable table = GetMyTableFromSomewhere();
string[] columnNames = table.Columns.Cast<DataColumn>().Select(c => c.ColumnName).ToArray();
foreach (var row in table.Rows.Cast<DataRow>())
{
Dictionary<string, object> values = columnNames.ToDictionary(c => c, c => row[c]);
EvaluateExpressionUsingTheseValues(values);
}
然后EvaluateExpressionUsingTheseValues
将"SomeColumn"
通过values["SomeColumn"]
.
我的想法是在循环内创建字典是资源密集型的。因此,这样的事情可能更省时:
DataTable table = GetMyTableFromSomewhere();
int rowIndex = -1;
var values = table.Columns.Cast<DataColumn>().Select(c => new
{
Key = c.ColumnName,
Value = new Func<object>(() => table.Rows[rowIndex][c.ColumnName])
}).ToDictionary(kv => kv.Key, kv => kv.Value);
for (rowIndex = 0; rowIndex < table.Rows.Count; rowIndex++)
{
EvaluateExpressionUsingTheseValues(values);
}
然后values["SomeColumn"]
inEvaluateExpressionUsingTheseValues
将只是values["SomeColumn"]()
,而不是。
我认为第一个构建字典的每次迭代开销很大,但查找速度很快,而第二个在构建字典方面没有每次迭代开销,但查找速度较慢。
哪个更好?