这个方法得到:
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;
}
}
}
可以从具有相对较大数据集的数百个线程调用此方法,因此这里的性能至关重要,我尝试创建尽可能少的新对象。
请注意 - 这是一个私有方法,仅由DataReader 使用,它读取每一行,并在读取下一行之前将其传递给另一个数组。
那么-在这里复制数组是否会以某种方式在这里进行优化,我应该(小心地)使用内存来提升这里的东西吗?
谢谢