Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Startup EF yang sangat lambat - 15 menit

Saya berhasil mengurangi total waktu mulai yang disebabkan oleh EF sebanyak 3 kali dengan trik berikut:

  1. Perbarui kerangka kerja ke 6.2 dan aktifkan caching model :

    CachingContextConfiguration kelas publik :DbConfiguration{public CachingContextConfiguration(){SetModelStore(new DefaultDbModelStore(Directory.GetCurrentDirectory()));}

    }

  2. Panggil ctx.Database.Initialize() eksplisit dari utas baru, sedini mungkin. Ini masih membutuhkan waktu 3-4 detik, tetapi karena ini terjadi bersamaan dengan hal-hal lain, ini sangat membantu.

  3. Muat entitas ke dalam cache EF dalam urutan yang wajar.

Sebelumnya, saya baru saja menulis Sertakan setelah Inlude, yang diterjemahkan menjadi beberapa gabungan. Saya menemukan "aturan praktis" di beberapa posting blog, bahwa hingga dua chained Termasuk EF berkinerja cukup baik, tetapi masing-masing memperlambat semuanya secara besar-besaran. Saya juga menemukan entri blog , yang menunjukkan EF caching:setelah entitas yang diberikan dimuat dengan Sertakan atau Muat, itu akan secara otomatis dimasukkan ke dalam properti yang tepat (penulis blog salah tentang penyatuan objek). Jadi saya melakukan ini:

  using (var db = new MyContext())
            {
                db.Fields.Load();
                db.Categories.Include(c => c.MainField).Include(x => x.Fields).Load();
                db.FieldValues.Load();
                return db.Objects.Include(x => x.MainFieldValue.Field).ToArray();
            } 

Ini mengambil data 6 kali lebih cepat daripada yang disertakan dari pertanyaan. Saya pikir setelah entitas dimuat sebelumnya, mesin EF tidak memanggil database untuk objek terkait, itu hanya mengambilnya dari cache.

  1. Saya juga menambahkan ini dalam konstruktor konteks saya:

        Configuration.LazyLoadingEnabled = false;
        Configuration.ProxyCreationEnabled = false;
    

Efeknya hampir tidak terlihat, tetapi mungkin memainkan peran lebih besar pada kumpulan data yang sangat besar.

Saya juga telah menonton ini presentasi EF Core oleh Rowan Miller dan saya akan beralih ke itu pada rilis berikutnya - dalam beberapa kasus 5-6 kali lebih cepat dari EF6.

Semoga ini bisa membantu seseorang




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TSQL Membandingkan dua Set

  2. Prosesor Intel yang Direkomendasikan untuk SQL Server 2014 – Maret 2015

  3. Pernyataan SQL - Bagaimana Meningkatkan kecepatan dengan pengindeksan

  4. Daftar Format Tanggal Tersedia dengan CONVERT() di SQL Server

  5. Perbaiki "Kesalahan overflow aritmatika mengonversi IDENTITAS ke tipe data ..." di SQL Server