2013-06-27 21 views
5

1つずつ追加するため、一括挿入にEntity Frameworkを使用することはお勧めできません。 (Example 1,example 2Entity Framework 5で大きなグラフを保存する

大きなグラフが下にある1つのオブジェクトを添付するのはどうでしょうか?オブジェクトの100Ks? - 具体的には:

  • これを行うためにEF5を使用する際の(時間/メモリ)パフォーマンスの考慮事項は何ですか?
  • 大きなグラフを保存するためのベストプラクティスはありますか?
  • 大規模なグラフを格納するためのリレーショナルデータベースですか?

背景のビット:

  • のグラフは、その後、ルートに取り付けられ、保存、EF5 POCOSを使用して作成されます。グラフは常に新しいデータであり、更新されることはありません。

  • 実際の作成プロセスは、大規模なケース(オブジェクトの100K)で数十秒かかる場合があります。そのため、アタッチ/セーブ処理がその時間の10%を要した場合、それは実行されません。全体の時間パフォーマンスに重大な影響を与えます。

+0

必ずしもエンティティを1つずつ追加する必要はありません。 私のプラクティスでは、オブジェクトグラフを独立した(ほとんどの)部分に分割し、段階的にロードして完全性を保ち、 'OutOfMemoryException'を得ないか、あるいは何時間も待たずに待っています。 – Fedor

+0

@Fyodorメモリ不足例外が発生していないし、時間がかかりませんでした。 –

+0

あなたは幸運にも、あなたのグラフは私のものよりも便利です。 – Fedor

答えて

4

EFのエキスパートとして知られている人もいませんから、私は尋ねようとします。

最近、私は多量のサイクル参照とエンティティ間の関係数を持つ複雑なモデルを扱ってきました。そして大量のデータ、はい、それ以上のものです。私は多くのことを試しましたが、誰も私のために便利ではなかったので、私はFastest Way of Inserting in Entity Frameworkを使って終わりました。それは1年前に私を助け、あなたは何とかあなたの質問の投稿にそれを言及していない。あなただけの1時間を挿入するエンティティ間の多くの複雑な関係を持って、完全に新しい大量のデータを持っていない場合、それは非常に高速であり、ため


しかし、あなたはすでにmentioned持っているように、その後の最速の方法はSqlBulkCopyですこの場合単純です。
CodeFirstアプローチを使用すると、たとえば、まずデータベース構造を作成し、次にデータを挿入することができます。

希望すると助かります! NoSQLストレージを使用しているかどうかはわかりません。 経験豊富な同僚がそれについていくつか追加することがあります。

+0

一度の操作で追加されるエンティティが多いほど、操作があまりにも多くのメモリを消費しない限り、高速になります。オブジェクトの種類で除算し、SqlBulkCopyを使用してその型のすべてのオブジェクトを挿入するのが最速ですか? –

+0

これはこれを行う最も速い方法です。すべてのエントリを挿入するのに数秒かかります。 – Fedor

関連する問題