現在、Entity Framework 4.1(コードファースト)とSQL Server CE 4.0を使用するアプリケーションで作業しています。 SQL Server CE 4.0から本当に好きな新しいものの1つは、計算された値です。Entity Framework 4.1 DatabaseGeneratedOption.Identityパフォーマンス
しかし、古いデータを新しいデータストアシステム(約50000エントリ)にインポートする際に、パフォーマンスに問題があります。これは私の2番目の実装です。最初のバージョンでは、Entity Framework 4.0とSQL Server CE 3.5が使用されていました。しかし、これらの実装には大きなパフォーマンス差があります。コードの最初の実装では、エントリをインポートするのに約1時間かかりますが、他の実装では数分しかかかりません。
SaveChanges
メソッドで最も多くの時間が費やされます。私は問題を[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
属性まで追跡しました。 [DatabaseGenerated(DatabaseGeneratedOption.None)]
を使用して、自分の世代の鍵を実装すると(単純な回避策として)、最初の実装のレベルでパフォーマンスが戻ります。
これは既知の問題ですか?このパフォーマンスの問題を解決する方法はありますか?それとも自分の鍵を生成する方法がありますか?
EF 4.1のバルク挿入に関する2つの質問/回答があります:http://stackoverflow.com/questions/5943394/why-is-inserting-entities-in-ef-4-1-so-slow-compared- to-objectcontext/5943699#5943699およびhttp://stackoverflow.com/questions/5940225/fastest-way-of-inserting-inentity-framework/5942176#5942176キーは、主に自動変更検出を無効にすることです。私は 'DatabaseGeneratedOption'との関係を見ていませんが、とにかく助けてください。 – Slauma
AutoDetectChangesEnabledを無効にしても、私の場合はパフォーマンスは向上しません(しかし、私はそれを行います)。 DatabaseGeneratedOption.Identityを使用しない場合のスピードアップはずっと高いです。 – Fox32