ホームページ > バックエンド開発 > C++ > 大規模なデータセットのエンティティフレームワークインサートを最適化し、タイムアウトを回避するにはどうすればよいですか?

大規模なデータセットのエンティティフレームワークインサートを最適化し、タイムアウトを回避するにはどうすればよいですか?

DDD
リリース: 2025-02-02 06:01:13
オリジナル
253 人が閲覧しました

How Can I Optimize Entity Framework Inserts for Large Datasets and Avoid Timeouts?

ブーストエンティティフレームワーク大きなデータセットを使用してパフォーマンスを挿入します

エンティティフレームワークへの大規模なデータ挿入は、重要なパフォーマンスボトルネックとトランザクションタイムアウトにつながる可能性があります。 この記事では、このプロセスを最適化するための戦略の概要を説明しています

コールを最小限に抑える:

各挿入が効率を大幅に低下させた後、SaveChanges()への呼び出しを繰り返します。 代わりに、これらの手法を使用してください:

SaveChanges()

batch inserts:
    すべてのレコードが追加された後に1回だけ
  • インターバルベースの挿入:SaveChanges()通常の間隔で
  • コール
  • (例:100レコードごと)。 コンテキストリサイクル:SaveChanges() savechanges()間隔で、添付のエンティティを解除するためにコンテキストを処分して再作成します。
  • 効率的なバルク挿入例:
次のコードは、高性能のバルク挿入パターンを示しています:

キーパフォーマンスチューニングパラメーター:

using (TransactionScope scope = new TransactionScope())
{
    MyDbContext context = null;
    try
    {
        context = new MyDbContext();
        context.Configuration.AutoDetectChangesEnabled = false;

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

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

    scope.Complete();
}

private MyDbContext AddToContext(MyDbContext context, Entity entity, int count, int batchSize, bool recycleContext)
{
    context.Set<Entity>().Add(entity);

    if (count % batchSize == 0)
    {
        context.SaveChanges();
        if (recycleContext)
        {
            context.Dispose();
            context = new MyDbContext();
            context.Configuration.AutoDetectChangesEnabled = false;
        }
    }

    return context;
}
ログイン後にコピー

システムの最適なバッチサイズを見つけるための値(例:100-1000)を実験してください。
  • batchSizeコンテキストのリサイクルは、追跡されたエンティティをクリアすることでパフォーマンスを改善します。 これがあなたの特定のシナリオで利益をもたらすかどうかを判断するためのテスト。
  • 周波数:データボリュームとデータベース構成の呼び出しの理想的な頻度を注意深く決定します。 recycleContext これらのベストプラクティスを実装することにより、エンティティフレームワークの挿入パフォーマンスを劇的に改善し、大規模なデータセットを操作するときにタイムアウトを防ぐことができます。

以上が大規模なデータセットのエンティティフレームワークインサートを最適化し、タイムアウトを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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