Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh mengoptimumkan sisipan rangka entiti untuk dataset yang besar dan mengelakkan masa tamat?

Bagaimanakah saya boleh mengoptimumkan sisipan rangka entiti untuk dataset yang besar dan mengelakkan masa tamat?

DDD
DDDasal
2025-02-02 06:01:13205semak imbas

How Can I Optimize Entity Framework Inserts for Large Datasets and Avoid Timeouts?

Meningkatkan Rangka Kerja Entiti Masukkan Prestasi dengan dataset yang besar

Penyisipan data berskala besar dalam rangka entiti boleh membawa kepada kesesakan prestasi yang signifikan dan masa tamat urus niaga. Artikel ini menggariskan strategi untuk mengoptimumkan proses ini.

Minimize Panggilan: SaveChanges()

Panggilan berulang kepada

selepas setiap penyisipan secara drastik mengurangkan kecekapan. Sebaliknya, gunakan teknik ini: SaveChanges()

Sisipan batch
  • : Jalankan hanya sekali selepas semua rekod ditambah. SaveChanges() Sisipan berasaskan interval:
  • Panggil
  • pada selang masa yang tetap (mis., Setiap 100 rekod). SaveChanges() Kitar semula konteks:
  • SaveChanges () pada selang waktu, kemudian buang dan mencipta semula konteks untuk melepaskan entiti yang dilampirkan.
  • Contoh memasukkan pukal yang cekap:

Kod berikut menunjukkan corak penyisipan pukal berprestasi tinggi:

Parameter Penalaan Prestasi Utama:
<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 largeDataset)
        {
            ++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 batchSize, bool recycleContext)
{
    context.Set<Entity>().Add(entity);

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

    return context;
}</code>

    :
  • Eksperimen dengan nilai (mis., 100-1000) untuk mencari saiz batch optimum untuk sistem anda. batchSize
  • :
  • Kitar semula konteks meningkatkan prestasi dengan membersihkan entiti yang dikesan. Ujian untuk menentukan sama ada ini menawarkan manfaat dalam senario khusus anda. recycleContext
  • kekerapan:
  • dengan teliti menentukan kekerapan ideal panggilan untuk volum data dan konfigurasi pangkalan data anda. SaveChanges() SaveChanges() Dengan melaksanakan amalan terbaik ini, anda secara dramatik dapat meningkatkan rangka kerja entiti memasukkan prestasi dan mencegah tamat masa apabila bekerja dengan dataset yang besar.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengoptimumkan sisipan rangka entiti untuk dataset yang besar dan mengelakkan masa tamat?. 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