Amalan terbaik untuk meningkatkan prestasi Entity Framework

Microsoft Entity Framework adalah ORM yang diperluas yang membantu anda mengasingkan model objek aplikasi anda dari model data. Ia adalah rangka kerja sumber terbuka untuk ADO.Net dan dimasukkan sebagai sebahagian daripada .Net Framework. Dalam catatan ini, saya akan mengemukakan beberapa petua yang boleh diikuti untuk mengoptimumkan prestasi Entity Framework. Pada bahagian yang berikut, saya akan memeriksa beberapa petua yang dapat digunakan untuk meningkatkan prestasi aplikasi ketika anda bekerja dengan Entity Framework.

Adakah Model Data Entiti anda mewakili satu Unit Kerja?

Semasa anda membuat EDM (Model Data Entiti) anda harus memastikan bahawa EDM mewakili satu unit kerja dan bukan keseluruhan pangkalan data terutamanya apabila anda mempunyai banyak objek (jadual, prosedur tersimpan, pandangan, dll.) Dalam pangkalan data anda yang terputus atau tidak diperlukan untuk unit kerja tertentu. Sekiranya EDM anda mewakili keseluruhan pangkalan data ketika tidak diperlukan, ia dapat menurunkan prestasi aplikasi kerana keperluan memuat banyak objek yang tidak diperlukan dalam memori. Pada dasarnya, anda harus memecahkan model data entiti yang besar menjadi yang lebih kecil dengan setiap model mewakili unit kerja.

Anda boleh merujuk artikel MSDN ini untuk maklumat lebih lanjut mengenai bagaimana prestasi Entity Framework dapat ditingkatkan.

Lumpuhkan Penjejakan perubahan

Anda harus mematikan penjejakan perubahan jika tidak diperlukan. Yang paling penting, anda tidak memerlukan penjejakan perubahan ketika anda hanya ingin mengambil data dan kemas kini mengenai data yang dibaca tidak diperlukan sama sekali. Anda boleh menggunakan pernyataan berikut untuk menonaktifkan pelacakan perubahan atau menyimpan hasil cache semasa anda ingin mengambil pelanggan dari pangkalan data tanpa perlu mengemas kini rekod.

Sekiranya anda ingin melumpuhkan penjejakan objek untuk jadual Pelanggan, anda boleh menggunakan kod berikut.

PayrollContext context = new PayrollContext();

Kurangkan kos penjanaan paparan menggunakan Paparan yang Dijana Pra

Pembentukan ObjectContext adalah operasi yang mahal kerana melibatkan kos memuat dan mengesahkan metadata. Anda harus memanfaatkan paparan yang dihasilkan sebelum ini untuk mengurangkan masa tindak balas ketika permintaan pertama dilaksanakan. Pada dasarnya, runtime Entity Framework membuat sekumpulan kelas (juga disebut view) ketika konteks objek dibuat untuk pertama kalinya. Anda boleh mengurangkan overhead ini dengan membuat pra-pandangan untuk fail EDMX menggunakan alat baris perintah EdmGen.exe atau templat T4. Perhatikan bahawa jika fail skema model telah berubah, anda perlu menghasilkan semula fail pandangan dengan menjalankan EdmGen.exe dengan bendera / mode: ViewGeneration. Anda juga boleh menjana pandangan dengan model kod pertama.

Lumpuhkan Pengesanan Perubahan Auto

Semasa cuba mengemas kini pangkalan data, Entity Framework perlu mengetahui perubahan yang telah dibuat kepada entiti sejak ia dimuat dalam memori. Pengesanan perubahan ini dilakukan dengan membandingkan nilai lama sifat dengan nilai baru atau berubah ketika anda membuat panggilan ke kaedah seperti, kaedah Find, (Remove,), Add (), Attach () dan SaveChanges (). Pengesanan perubahan ini sangat mahal dan dapat menurunkan prestasi aplikasi terutamanya ketika anda bekerja dengan banyak entiti. Anda boleh melumpuhkan pengesanan perubahan menggunakan kod berikut.

Apabila anda ingin melumpuhkan pengesanan perubahan, adalah praktik yang baik untuk menonaktifkannya di dalam blok cubaan / tangkapan dan kemudian aktifkan semula di dalam blok akhirnya. Perhatikan bahawa anda boleh mengabaikan ini ketika anda bekerja dengan sekumpulan data yang agak kecil - anda akan memperoleh keuntungan prestasi yang signifikan dengan mematikan pengesanan perubahan ketika anda bekerja dengan sejumlah besar data.

Perkara lain yang perlu diingat

Gunakan unjuran untuk memilih hanya bidang yang diperlukan semasa mengambil data. Anda harus mengelakkan mengambil medan yang tidak diperlukan.

Cuplikan kod berikut menggambarkan bagaimana anda dapat menggunakan pengambilan data dengan cara bertanda - perhatikan bagaimana indeks halaman awal dan ukuran halaman telah digunakan untuk memilih hanya data yang diperlukan.

int pageSize = 25, startingPageIndex = 1;

NorthwindEntities dataContext = new NorthwindEntities();

List lstCus = dataContext.tblCustomers.Take(pageSize)

.Skip(startingPageIndex * pageSize)

.ToList();

Anda juga harus memilih koleksi yang sesuai dan menggunakan pertanyaan yang disusun untuk meningkatkan prestasi pertanyaan LINQ anda semasa mengambil data yang didedahkan oleh EDM. Elakkan menarik semua objek pangkalan data dalam satu model data entiti. Dapatkan hanya jumlah rekod yang diperlukan dan elakkan menggunakan "Mengandung" semasa menggunakan LINQ ke Entiti. Anda dapat menggunakan paging untuk mengambil hanya data yang diminta atau membatasi jumlah data yang diambil dari pangkalan data. Anda juga harus menambahkan indeks ke entiti anda dengan membuat panggilan ke kaedah CreateIndex ().

Anda boleh mengetahui lebih lanjut mengenai pertimbangan prestasi semasa menggunakan Entity Framework dari pautan ini.