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

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

Jan 23, 2025 pm 09:52 PM

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

Meningkatkan Prestasi Sisipan Pukal Rangka Kerja Entiti: Strategi dan Penanda Aras

Memasukkan set data yang besar dengan cekap ke dalam Rangka Kerja Entiti adalah penting untuk mengelakkan kesesakan prestasi. Artikel ini menangani cabaran untuk memasukkan 4000 rekod dalam transaksi, senario yang terdedah kepada transaksi yang tidak lengkap.

Mengelakkan Perangkap Kerap SaveChanges() Panggilan

Saluran prestasi utama berpunca daripada panggilan berulang kali SaveChanges() untuk setiap rekod. Pendekatan ini melambatkan proses dengan ketara. Begini cara mengoptimumkan:

1. Tunggal SaveChanges() Panggilan: Laksanakan satu SaveChanges() panggilan selepas semua rekod ditambahkan.

2. Panggilan SaveChanges() Berkelompok: Masukkan rekod dalam kelompok (mis., 100 atau 1000) dan panggil SaveChanges() selepas setiap kelompok.

3. Pelupusan Konteks dengan Berkumpulan SaveChanges(): Gabungkan batching dengan mencipta konteks pangkalan data baharu selepas setiap panggilan SaveChanges(). Ini mengosongkan konteks, meningkatkan lagi prestasi.

Corak Sisipan Pukal Dioptimumkan:

Kod ini menggambarkan pendekatan yang disyorkan:

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();
}
Salin selepas log masuk

Analisis Prestasi:

Ujian dengan 560,000 entiti (9 sifat skalar) menghasilkan keputusan ini:

  • Tambahan SaveChanges() (komit kiraan 1): > 20 minit
  • Berkelompok SaveChanges() (kiraan komit 1000): 242 saat
  • Berkelompok SaveChanges() dengan Pelupusan Konteks (komit kiraan 100): 164 saat

Kesimpulan:

Dengan mengelakkan panggilan SaveChanges() yang kerap dan menggunakan sisipan berkelompok dengan pelupusan konteks, peningkatan prestasi yang ketara dicapai dalam sisipan pukal Rangka Kerja Entiti. Pengoptimuman ini meminimumkan risiko tamat masa transaksi dan memastikan pengendalian data yang cekap dalam transaksi aktif.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengoptimumkan Sisipan Pukal dalam Rangka Kerja Entiti untuk Peningkatan Prestasi?. 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

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Kurangkan penggunaan memori MySQL di Docker Kurangkan penggunaan memori MySQL di Docker Mar 04, 2025 pm 03:52 PM

Kurangkan penggunaan memori MySQL di Docker

Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table? Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table? Mar 19, 2025 pm 03:51 PM

Bagaimana anda mengubah jadual di MySQL menggunakan pernyataan Alter Table?

Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama Mar 04, 2025 pm 04:01 PM

Cara menyelesaikan masalah MySQL tidak dapat membuka perpustakaan bersama

Apa itu SQLite? Gambaran Keseluruhan Komprehensif Apa itu SQLite? Gambaran Keseluruhan Komprehensif Mar 04, 2025 pm 03:55 PM

Apa itu SQLite? Gambaran Keseluruhan Komprehensif

Jalankan MySQL di Linux (dengan/tanpa bekas podman dengan phpmyadmin) Jalankan MySQL di Linux (dengan/tanpa bekas podman dengan phpmyadmin) Mar 04, 2025 pm 03:54 PM

Jalankan MySQL di Linux (dengan/tanpa bekas podman dengan phpmyadmin)

Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah Mar 04, 2025 pm 03:49 PM

Menjalankan Pelbagai Versi MySQL di MacOS: Panduan Langkah demi Langkah

Bagaimanakah saya menjamin MySQL terhadap kelemahan biasa (suntikan SQL, serangan kekerasan)? Bagaimanakah saya menjamin MySQL terhadap kelemahan biasa (suntikan SQL, serangan kekerasan)? Mar 18, 2025 pm 12:00 PM

Bagaimanakah saya menjamin MySQL terhadap kelemahan biasa (suntikan SQL, serangan kekerasan)?

Bagaimana saya mengkonfigurasi penyulitan SSL/TLS untuk sambungan MySQL? Bagaimana saya mengkonfigurasi penyulitan SSL/TLS untuk sambungan MySQL? Mar 18, 2025 pm 12:01 PM

Bagaimana saya mengkonfigurasi penyulitan SSL/TLS untuk sambungan MySQL?

See all articles