2012-04-19 9 views
2

私は現在、CodeprojectのカスタムCSVクラスを使用してCSVオブジェクトを作成しています。私はそれを使用してDataTableを作成します。プロファイリングの下で​​は、これは私が望むより多くの時間がかかり、より効率的なやり方があるのだろうかと思います。DataTable.Load()のパフォーマンスを向上させる方法

CSVには、約2,500行と500列が含まれています。

CSVリーダーからです:http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader

StreamReader s = new StreamReader(confirmedFilePath); 
CsvReader csv = new CsvReader(s, true); 
DataTable dt = new DataTable(); 
dt.Load(csv); 

私は、データアダプターを示唆Google検索に出くわしたが、それはこの唯一つの基準でしたか?私はさらに検索しましたが、コラボレーションは見つかりませんでした。

+1

「プロファイリング中」これは私が望むよりも時間がかかります。操作を行うときにプロファイルを作成しないでください。プロファイリングは、CPU、メモリ、IO集中型です。 – Oded

+0

私はそれを感謝しますが、すべてのコードに比例しています。私は、コードが約5〜7倍遅く実行されていることを知っている...ので、私はどのくらい長くLoad()関数は、プロファイラなしで取ることができ、それはまだ少し長いです。 – mezamorphic

+0

'Stopwatch'を使用して関数を正確に時刻付けることができます。 – Oded

答えて

0

GenericParserを試してください。

+1

-1:リンクだけを含む回答は投稿しないでください。リンクが壊れます。質問に答えたページの部分を少なくとも示したり引用したりして、質問者に質問に答えてください。 –

1

CsvReaderは高速で信頼性が高いため、CSVデータを読み取るための高速な検索エンジンはありません。

制限は、新しいデータを処理するDataTableから発生します.2500 * 500は量です。私は最速の方法は、直接CsvReader - > DataBase(ADO.NET)のチェーンだろうと思う。

0

データベースからのデータの読み込みには、常に制約が適用されるため、BeginLoadData()EndLoadData()を使用してください。ただし、唯一の欠点は、CSVファイルは明らかにそうでないため、操作がすべて終了してから例外がスローされることです。

... 
dt.BeginLoadData(); 
dt.Load(csv, LoadOption.Upsert); 
dt.EndLoadData(); 

EDIT:DataBaseが空である、または既存のデータへの任意の以前の変更保存したくない場合にのみ、LoadOption.Upsertを使用してください - それも、より速く、そのように。

関連する問題