2

EF4 を使用してテキスト ファイルをデータベースに読み込んでいます。このファイルには 600,000 行を超える行が含まれているため、速度が重要です。

新しいエンティティ オブジェクトを作成するたびに SaveChanges を呼び出すと、このプロセスには約 15 分かかります。1024 個のオブジェクトを作成した後で SaveChanges を呼び出すと、4 分に短縮されます。

1024 は私が選んだ任意の数字で、基準点はありません。

しかし、SaveChanges を呼び出す前にエンティティ セットに読み込む最適な数のオブジェクトがあるかどうか疑問に思いました。もしそうなら...どうやってそれを解決しますか(試行錯誤以外)?

4

2 に答える 2

4

これは実際には非常に興味深い問題です。コンテキストが非常に大きくなると、EF は非常に遅くなります。バッチ挿入中に AutoDetectChanges を無効にすることで、実際にこれに対処し、パフォーマンスを大幅に向上させることができます。ただし、一般的には、SQL のトランザクションに含めることができる項目が多いほど良いです。

EF パフォーマンスに関する私の投稿 ( http://blog.staticvoid.co.nz/2012/03/entity-framework-comparative.html ) と、AutoDetectChanges を無効にすることでこれがどのように改善されるかについての私の投稿 ( http://blog. staticvoid.co.nz/2012/05/entityframework-performance-and.html、これらはバッチサイズがパフォーマンスにどのように影響するかについての良いアイデアも提供します.

于 2012-05-27T12:31:52.857 に答える
1

アプリケーションのプロファイルを作成し、選択した 2 つのアプリケーションで何が時間を取っているかを確認します。これにより、推測するのに適した数値が得られるはずです。

個人的には、テキスト ファイルの読み込みに EF を使用している理由を質問する必要があります。BCP またはストレート SQLCommands を使用して DB に簡単に起動できるはずの何かが、あまりにもやり過ぎのようです。

于 2012-05-27T11:46:06.477 に答える