ホームページ > データベース > mysql チュートリアル > 大量のデータ挿入のために Entity Framework を最適化するにはどうすればよいですか?

大量のデータ挿入のために Entity Framework を最適化するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-23 21:42:10
オリジナル
962 人が閲覧しました

How Can I Optimize Entity Framework for High-Volume Data Insertion?

Entity Framework のデータ挿入速度の向上

Entity Framework に大量のデータを挿入するには、最適化された技術が必要です。 この記事では、挿入速度を高速化するための最も効率的な方法を検討します。

頻繁な SaveChanges() 通話の落とし穴

レコードごとに SaveChanges() を呼び出すことは、パフォーマンスの大きなボトルネックになります。 速度を最大化するには、この方法は避けてください。 次の代替案を検討してください:

バッチ SaveChanges():

  • 単一の SaveChanges() 呼び出しを実行して、すべての挿入を同時にコミットします。

定期的な SaveChanges():

  • バッチ (100 レコードなど) で挿入を処理し、各バッチの後に SaveChanges() を呼び出します。

コンテキストのリサイクル:

  • DbContext の後に SaveChanges() を破棄し、新しいものを作成します。これにより、追跡されたエンティティの蓄積が防止され、時間の経過とともにパフォーマンスに大きな影響を与える可能性があります。

例のコード:

この例は、効率的な挿入戦略を示しています。

<code class="language-csharp">using (TransactionScope scope = new TransactionScope())
{
    MyDbContext context = null;
    try
    {
        context = new MyDbContext();
        context.Configuration.AutoDetectChangesEnabled = false;

        int count = 0;
        foreach (var entityToInsert in someCollectionOfEntitiesToInsert)
        {
            ++count;
            context = AddToContext(context, entityToInsert, count, 100, true);
        }

        context.SaveChanges();
    }
    finally
    {
        if (context != null)
            context.Dispose();
    }

    scope.Complete();
}</code>
ログイン後にコピー

ベンチマーク結果:

560,000 のエンティティを対象としたテストでは、次の結果が得られました:

  • 個人 SaveChanges(): 数時間 (非常に遅い)
  • 100 レコードでのバッチ処理: 164 秒
  • 1000 レコードでのバッチ処理: 191 秒

これらの結果は、コンテキスト破棄を伴う定期的な SaveChanges() が最高のパフォーマンスを提供することを示しています。

以上が大量のデータ挿入のために Entity Framework を最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート