ホームページ > データベース > mysql チュートリアル > パフォーマンスを向上させるために Entity Framework での一括挿入を最適化するにはどうすればよいですか?

パフォーマンスを向上させるために Entity Framework での一括挿入を最適化するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-23 21:52:10
オリジナル
718 人が閲覧しました

How Can I Optimize Bulk Inserts in Entity Framework for Improved Performance?

Entity Framework の一括挿入パフォーマンスの向上: 戦略とベンチマーク

パフォーマンスのボトルネックを回避するには、大規模なデータセットを Entity Framework に効率的に挿入することが重要です。この記事では、トランザクション内に 4000 レコードを挿入するという課題に取り組みます。これは、トランザクションが不完全になりやすいシナリオです。

頻繁な SaveChanges() 通話の落とし穴を避ける

主なパフォーマンスの低下は、レコードごとに SaveChanges() を繰り返し呼び出すことに起因します。 このアプローチではプロセスが大幅に遅くなります。 最適化する方法は次のとおりです:

1.単一の SaveChanges() 呼び出し: すべてのレコードが追加された後、単一の SaveChanges() 呼び出しを実行します。

2.バッチ化された SaveChanges() 呼び出し: レコードをバッチ (100 または 1000 など) に挿入し、各バッチの後に SaveChanges() を呼び出します。

3.バッチ化された SaveChanges(): によるコンテキストの破棄 各 SaveChanges() 呼び出し後の新しいデータベース コンテキストの作成とバッチ処理を組み合わせます。 これによりコンテキストがクリアされ、パフォーマンスがさらに向上します。

最適化された一括挿入パターン:

このコードは、推奨されるアプローチを示しています:

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

        int count = 0;
        int commitCount = 100; // Adjust as needed
        foreach (var entity in someCollection)
        {
            count++;
            context.Set<entity>().Add(entity);

            if (count % commitCount == 0)
            {
                context.SaveChanges();
                context.Dispose();
                context = new MyDbContext();
                context.Configuration.AutoDetectChangesEnabled = false;
            }
        }
        context.SaveChanges();
    }
    scope.Complete();
}</code>
ログイン後にコピー

パフォーマンス分析:

560,000 のエンティティ (9 つのスカラー プロパティ) を使用したテストでは、次の結果が得られました:

  • 増分 SaveChanges() (コミット数 1): > 20分
  • バッチ化された SaveChanges() (コミット数 1000): 242 秒
  • コンテキスト破棄を使用して SaveChanges() をバッチ処理しました (コミット カウント 100): 164 秒

結論:

頻繁な SaveChanges() 呼び出しを回避し、コンテキスト破棄を伴うバッチ挿入を利用することにより、Entity Framework の一括挿入で大幅なパフォーマンスの向上が達成されます。この最適化により、トランザクション タイムアウトのリスクが最小限に抑えられ、アクティブなトランザクション内での効率的なデータ処理が保証されます。

以上がパフォーマンスを向上させるために Entity Framework での一括挿入を最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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