Rumah >pembangunan bahagian belakang >C++ >Apakah cara terpantas untuk memasukkan 4000 rekod ke dalam pangkalan data menggunakan kerangka entiti dalam transaksi yang tidak dapat diselesaikan?

Apakah cara terpantas untuk memasukkan 4000 rekod ke dalam pangkalan data menggunakan kerangka entiti dalam transaksi yang tidak dapat diselesaikan?

Barbara Streisand
Barbara Streisandasal
2025-02-02 06:11:14199semak imbas

What's the Fastest Way to Insert 4000  Records into a Database Using Entity Framework within a TransactionScope?

rangka kerja entiti dengan cekap memasukkan kaedah data

<:> Soalan:

Apabila menggunakan Transactionscope untuk pemprosesan transaksi, bagaimana dengan cepat memasukkan lebih daripada 4,000 rekod ke dalam pangkalan data?

Jawapan:

Untuk sejumlah besar penyisipan data (4000 rekod), kecekapan kaedah sangat rendah. Teknologi pengoptimuman berikut dapat meningkatkan kelajuan penyisipan dengan ketara:

SaveChanges() one -time

:
    Selepas semua rekod ditambah kepada konteks, panggilan pakai buang
  • . SaveChanges() batch : SaveChanges() selepas mengendalikan kuantiti yang ditentukan (contohnya, 100 item), hubungi
  • sekali.
  • SaveChanges() Konteks Rekonstruksi: Sama seperti kaedah batch, tetapi lepaskan konteks dan buat konteks baru untuk melepaskan entiti tambahan selepas SaveChanges().
  • Lumpuhkan Perubahan ke Ujian: Perubahan automatik yang dilumpuhkan sementara untuk menguji, set SaveChanges() ke . SaveChanges()
  • Contoh Pelaksanaan Contoh:
  • Serpihan kod berikut menggabungkan teknologi pengoptimuman di atas: Configuration.AutoDetectChangesEnabled false
  • Mod ini mencapai penyisipan batch dengan memproses beberapa rekod sebelum memanggil
. Di samping itu, pelepasan dan pencegahan semula konteks akan membantu menghapuskan entiti tambahan, dengan itu mengurangkan penggunaan memori dan meningkatkan prestasi.

Perbandingan prestasi:

Gunakan mod pengoptimuman ini untuk memasukkan 560,000 entiti ke dalam keputusan ujian prestasi pangkalan data:

<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();
}

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

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

    return context;
}</code>

, SaveChanges(): 202 saat SaveChanges()

,

: 164 saat

Sebaliknya, jika anda memanggil

untuk setiap rekod, ia akan mengambil masa berjam -jam untuk menyelesaikan operasi yang sama.

Atas ialah kandungan terperinci Apakah cara terpantas untuk memasukkan 4000 rekod ke dalam pangkalan data menggunakan kerangka entiti dalam transaksi yang tidak dapat diselesaikan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn