Praktik terbaik untuk meningkatkan kinerja Entity Framework

Kerangka Kerja Entitas Microsoft adalah ORM yang diperluas yang membantu Anda mengisolasi model objek aplikasi Anda dari model data. Ini adalah kerangka ORM open source untuk ADO.Net dan disertakan sebagai bagian dari .Net Framework. Pada postingan kali ini, saya akan menyajikan beberapa tips yang dapat diikuti untuk mengoptimalkan kinerja Entity Framework. Pada bagian selanjutnya, saya akan memeriksa beberapa tip yang dapat diadopsi untuk meningkatkan kinerja aplikasi saat Anda bekerja dengan Entity Framework.

Apakah Model Data Entitas Anda mewakili satu Unit Kerja?

Saat Anda membuat EDM (Model Data Entitas) Anda harus memastikan bahwa EDM mewakili satu unit kerja dan bukan seluruh database terutama ketika Anda memiliki banyak objek (tabel, prosedur tersimpan, tampilan, dll.) Di database Anda yang terputus atau tidak diperlukan untuk unit kerja tertentu. Jika EDM Anda merepresentasikan seluruh database saat tidak diperlukan, hal itu dapat menurunkan kinerja aplikasi karena kebutuhan untuk memuat banyak objek yang tidak perlu ke dalam memori. Intinya, Anda harus memecah model data entitas besar menjadi yang lebih kecil dengan setiap model mewakili satu unit kerja.

Anda dapat merujuk ke artikel MSDN ini untuk informasi lebih lanjut tentang bagaimana kinerja Entity Framework dapat ditingkatkan.

Nonaktifkan pelacakan Perubahan

Anda harus menonaktifkan pelacakan perubahan jika tidak diperlukan. Yang terpenting, Anda tidak perlu mengubah pelacakan ketika Anda hanya ingin mengambil data dan pembaruan pada data yang dibaca tidak diperlukan sama sekali. Anda bisa menggunakan pernyataan berikut untuk menonaktifkan pelacakan perubahan atau cache hasil kueri saat Anda ingin mengambil pelanggan dari database tanpa perlu memperbarui rekaman.

Jika Anda ingin menonaktifkan pelacakan objek untuk tabel Pelanggan, Anda dapat menggunakan kode berikut.

PayrollContext context = new PayrollContext();

Kurangi biaya pembuatan tampilan menggunakan Tampilan yang Dibuat Sebelumnya

Pembuatan ObjectContext adalah operasi yang mahal karena melibatkan biaya pemuatan dan validasi metadata. Anda harus memanfaatkan tampilan yang dibuat sebelumnya untuk mengurangi waktu respons saat permintaan pertama dijalankan. Intinya, runtime Entity Framework membuat sekumpulan kelas (juga disebut tampilan) saat konteks objek dibuat untuk pertama kalinya. Anda dapat mengurangi overhead ini dengan membuat tampilan untuk file EDMX terlebih dahulu menggunakan alat baris perintah EdmGen.exe atau template T4. Perhatikan bahwa jika file skema model telah berubah, Anda perlu menghasilkan kembali file views dengan menjalankan EdmGen.exe dengan / mode: flag ViewGeneration. Anda juga dapat membuat tampilan dengan model pertama kode.

Nonaktifkan Deteksi Otomatis Perubahan

Saat mencoba memperbarui database, Entity Framework perlu mengetahui perubahan yang telah dibuat ke entitas sejak dimuat di memori. Deteksi perubahan ini dilakukan dengan membandingkan nilai lama properti dengan nilai baru atau yang diubah saat Anda melakukan panggilan ke metode seperti, Find (), Remove (), Add (), Attach () dan SaveChanges (). Deteksi perubahan ini sangat mahal dan dapat menurunkan kinerja aplikasi terutama saat Anda bekerja dengan banyak entitas. Anda dapat menonaktifkan deteksi perubahan menggunakan kode berikut.

Saat Anda ingin menonaktifkan deteksi perubahan, praktik yang baik adalah menonaktifkannya di dalam blok coba / tangkap dan kemudian mengaktifkannya kembali di dalam blok terakhir. Perhatikan bahwa Anda dapat mengabaikan ini saat Anda bekerja dengan kumpulan data yang relatif kecil - Anda akan mendapatkan peningkatan kinerja yang signifikan dengan menonaktifkan deteksi perubahan saat Anda bekerja dengan kumpulan data yang besar.

Hal-hal lain yang perlu diperhatikan

Gunakan proyeksi untuk memilih hanya bidang yang diperlukan saat mengambil data. Anda harus menghindari mengambil bidang yang tidak diperlukan.

Potongan kode berikut mengilustrasikan bagaimana Anda dapat menggunakan pengambilan data dengan cara halaman - 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 kueri terkompilasi untuk meningkatkan kinerja kueri LINQ Anda saat mengambil data yang diekspos oleh EDM. Hindari menarik semua objek database dalam satu model data entitas. Ambil hanya sejumlah catatan yang diperlukan dan hindari menggunakan "Berisi" saat menggunakan LINQ ke Entitas. Anda dapat menggunakan paging untuk mengambil hanya data yang diminta atau membatasi jumlah data yang diambil dari database. Selain itu, Anda harus menambahkan indeks ke entitas Anda dengan melakukan panggilan ke metode CreateIndex ().

Anda dapat mempelajari lebih lanjut tentang pertimbangan kinerja saat menggunakan Entity Framework dari tautan ini.