私は列のストリームに格納されたデータに基づいて塗りつぶす必要があるオブジェクトを持っています。つまり、ストリームには最初にDataTableのスキーマが含まれています。現時点ではC#DataTableに列に格納されたデータを入力する最も速い方法は何ですか?
、私はすべてデータ値を保持するのに十分な空の行を作成します
- のではなく単純なアプローチを取っています。
- セルごとにこれらの行を入力します。
結果は、セルごとの繰り返しです。これは、特に言い表せません。
です:
// Create rows first...
// Then populate...
foreach (var col in table.Columns.Cast<DataColumn>)
{
List<object> values = GetValuesfromStream(theStream);
// Actual method has some DBNull checking here, but should
// be immaterial to any solution.
for (var i=0; i<values.Count; i++)
table.Rows[i][col] = values[i];
}
私の推測では、各列のDataStorage
項目は行が追加されるように拡大されていないが、値が各列に追加されると、私はこれまで、特定のからだバッキングです。この種のデータを読み込むためのヒント。
NBまず、すべてのリストを最初にロードし、次に行単位で読み込むことは、おそらく分かりません。この方法は、巨大なDataTable
オブジェクトをシリアル化するときに発生する可能性のあるメモリ不足の可能性を軽減するために、データグリッド全体のクローンを作成し、それを読み込むだけでおそらく問題が他の場所に移ります。元のテーブルと別の値の列には十分なメモリがありますが、DataTable
のコピーが2つあるとは限りません。
移調している場合は、セル単位で作業する必要性を避けることができないことがわかります。/// –
そのため、当面はセル単位で操作しています。どこかに隠されているより速いルート。私の推測では、基になる 'DataStorage'オブジェクトにアクセスしてそこの配列に直接コピーする必要がありますが、行には本質的にそれらの配列に対するインデックスであるIDが付いているため、あれは。 – tobriand
だから、最初のコメントは、テーブルごとに 'List'を作成し、それを記入してから、 'table.Rows'に直接アクセスするのではなく、テーブルに追加してください。これにより、ヌル値を受け入れることができない列や、式が含まれている箇所の問題を回避できます。多くの減速の結果、この問題は、何か他のものよりも表現の再計算や 'DataTable'イベントモデルのように思えます。 –
tobriand