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:
<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>
Analisis Prestasi:
Ujian dengan 560,000 entiti (9 sifat skalar) menghasilkan keputusan ini:
SaveChanges()
(komit kiraan 1): > 20 minitSaveChanges()
(kiraan komit 1000): 242 saatSaveChanges()
dengan Pelupusan Konteks (komit kiraan 100): 164 saatKesimpulan:
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!