【发布时间】:2013-09-07 15:33:58
【问题描述】:
这个方法得到:
IEnumerable<object[]> - 其中每个数组都是固定大小(它代表关系
数据结构)。
DataEnumerable.Column[] - 一些元数据列,大多数情况下,所有行的值都相同。
预期结果:
每个“行”都应该为这些列中的每一列获取值(因此数据结构保持相关性)。
private IEnumerable<object[]> BindExtraColumns(IEnumerable<object[]> baseData, int dataSize, DataEnumerable.Column[] columnsToAdd)
{
int extraColumnsLength = columnsToAdd.Length;
object[] row = new object[dataSize + extraColumnsLength];
string columnName;
int rowNumberColumnIndex = -1;
for (int i = 0; i < extraColumnsLength; i++)
{
//Assign values that doesn't change between lines..
// Assign rowNumberColumnIndex if row number column exists
}
//Assign values that change here, since we currently support only row number
// i'ts not generic enough
if (rowNumberColumnIndex != -1)
{
int rowNumber = 1;
foreach (var baseRow in baseData)
{
row[rowNumberColumnIndex] = rowNumber;
Array.Copy(baseRow, 0, row, extraColumnsLength, dataSize);
yield return row;
rowNumber++;
}
}
else
{
foreach (var baseRow in baseData)
{
Array.Copy(baseRow, 0, row, extraColumnsLength, dataSize);
yield return row;
}
}
}
这个方法可以从数百个具有相对大数据集的线程中调用,所以 这里的性能很关键,我尝试创建尽可能少的新对象。
请注意 - 这是一个私有方法,它使用 ONLY BY DataReader,它读取每一行,并立即将其传递给另一个数组在读取下一行之前 .
那么 - 在这里复制数组是否会以某种方式在这里进行优化,我应该(小心地)使用内存来提升这里的东西吗?
谢谢
【问题讨论】:
标签: c# arrays enumerable