1

大規模な DataTable (約 15000 行と 100 列) があり、すべての行の一部の列に値を設定する必要があります。

// Creating the DataTable
DataTable dt = new DataTable();
for (int i = 0; i < COLS_NUM; i++)
{
    dt.Columns.Add("COL" + i);
}    
for (int i = 0; i < ROWS_NUM; i++)
{
    dt.Rows.Add(dt.NewRow());
}

// Setting several values in every row
Stopwatch sw2 = new Stopwatch();
sw2.Start();
foreach (DataRow row in dt.Rows)
{
    for (int j = 0; j < 15; j++)
    {
        row["Col" + j] = 5;
    }
}
sw2.Stop();

上記の実測時間は約4.5秒。これを改善する簡単な方法はありますか?

4

3 に答える 3

1

私が考えることができる 1 つの改善点は、列を名前ではなくインデックスで編集することです。

foreach (DataRow row in dt.Rows)
{
    for (int j = 0; j < 15; j++)
    {
        row[j] = 5;
    }
}

経験的なテストでは、あなたの方法は私のコンピューターで約 1500 ミリ秒で実行され、このインデックス ベースのバージョンは約 1100 ミリ秒で実行されます。

また、この投稿でマークの回答を参照してください。

forループなしでデータテーブルのすべての行に値を設定する

于 2012-12-15T20:00:26.363 に答える
0

これは、質問で明確ではないビジネスロジックに依存しますが、すべての行の一部の列に値を設定する場合は、次を試してください。

  • 個別の一時列を作成します。元のデータ テーブルを作成するときに同じループで作成できます。

  • この列に新しい値を入力します。

  • 古い列を削除し、代わりに新しい列を挿入します。

新しい値が期待できる場合、またはすべての行に同じ値がある場合 (例のように)、または何らかの繰り返しがある場合、このソリューションは論理的です。すべての行をループするよりも高速です。

于 2012-12-15T20:04:12.527 に答える