Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Mengoptimumkan Prestasi Sisipan Pukal dalam Rangka Kerja Entiti?

Bagaimanakah Saya Boleh Mengoptimumkan Prestasi Sisipan Pukal dalam Rangka Kerja Entiti?

Patricia Arquette
Lepaskan: 2025-01-23 21:57:09
asal
886 orang telah melayarinya

How Can I Optimize Bulk Insertion Performance in Entity Framework?

Penjelasan terperinci tentang pengoptimuman prestasi sisipan kelompok Rangka Kerja Entiti

Memasukkan sejumlah besar data ke dalam pangkalan data menggunakan Rangka Kerja Entiti boleh menjadi tugas yang mencabar. Terutama apabila bekerja dalam skop transaksi dan volum data melebihi 4000 rekod, ia mungkin mengakibatkan transaksi tidak lengkap.

Untuk menyelesaikan isu ini, adalah penting untuk memahami bahawa panggilan SaveChanges() pada setiap rekod boleh menjejaskan prestasi dengan teruk. Adalah disyorkan untuk menggunakan strategi pengoptimuman berikut:

  1. Panggil SaveChanges() sekali gus: Daripada memanggil SaveChanges() selepas setiap rekod disimpan, kumpulkan perubahan dan simpan semuanya sekali gus selepas semua rekod diproses.

  2. Batch SaveChanges(): Jika menyimpan semua rekod serentak masih terlalu perlahan, pertimbangkan untuk memanggil SaveChanges() setiap bilangan rekod tertentu (mis. 100).

  3. Buat dan keluarkan konteks secara berkala: Apabila batch berubah, pertimbangkan untuk mencipta konteks baharu dan keluarkan konteks sedia ada selepas setiap kelompok untuk mengosongkan entiti terkumpul dalam konteks.

  4. Lumpuhkan pengesanan perubahan: Dengan melumpuhkan pengesanan perubahan automatik, Rangka Kerja Entiti boleh menumpukan pada memasukkan rekod baharu tanpa menghabiskan masa menjejaki perubahan.

Contoh kod:

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

        int count = 0;
        foreach (var entity in entities)
        {
            ++count;
            context.Set<MyEntity>().Add(entity); // 使用更明确的类型

            if (count % 100 == 0)
            {
                context.SaveChanges();
            }
        }

        context.SaveChanges(); // 保存剩余的记录
    }

    scope.Complete();
}
Salin selepas log masuk

Tanda Aras Prestasi:

Untuk ujian dengan 560,000 entiti, keputusan penanda aras berikut diperhatikan:

  • Bilangan komitmen: 1, Buat semula konteks: Tidak: Lebih daripada 20 jam
  • Bilangan komitmen: 100, Buat semula konteks: Tidak: Lebih daripada 20 minit
  • Bilangan komitmen: 1000, Buat semula konteks: Tidak: 242 saat
  • Bilangan komitmen: 10, Buat semula konteks: Ya: 241 saat
  • Bilangan komitmen: 100, buat semula konteks: Ya: 164 saat

Pengoptimuman ini meningkatkan prestasi dengan ketara dan memastikan kejayaan memasukkan set data besar dalam had tamat masa transaksi. Memilih saiz kelompok yang sesuai dan sama ada untuk mencipta semula konteks memerlukan penalaan dan ujian berdasarkan keadaan sebenar.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengoptimumkan Prestasi Sisipan Pukal dalam Rangka Kerja Entiti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan