0

このメソッドは以下を取得します。

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のみを使用するプライベート メソッドであり、次の行を読み取る直前に別の配列に渡します。

それで-ここで配列をコピーすると、ここで何らかの形で最適化されますか?ここで物事を後押しするために(慎重に)メモリを使用する必要がありますか?

ありがとう

4

1 に答える 1