Mengoptimalkan EF dengan Future Extension

Soeleman 3 Maret 2017

Mengoptimalkan EF dengan Future Extension

Bekerja dengan Entity-Framework (EF) tidak berarti segalanya sudah selesai dengan database. EF adalah library umum untuk bekerja dengan RDBMS database (di EF 6 ke bawah, EF Core bisa support NoSQL), tentu fungsinya dibuat secara umum juga. Ada beberapa hal yang kita perlu rubah kalau ingin memanfaatkan lebih dari library ini.

EF Way

Kalau melihat code dibawah, menurut anda apakah sudah ok? Ini kode yang biasa kita lihat, ketika akan mengambil data dengan EF. Dalam membuat sebuah form, kita juga perlu data pendukung. Seperti di kode, ada unit data yang mungkin di-bind ke ComboBox.

< VB.NET >

alt text

< C# >

alt text

Jadi Ok? Yakin? Coba perhatikan lebih detail

EF Profiler

Disini kita menggunakan SQL Profiler untuk SQL Server untuk melihat apa yang EF lakukan. Kita melihat EF men-generated T-SQL dan meng-execute-nya untuk kode countProduct.

alt text

Hal yang sama juga untuk kode listProduct

alt text

Ini yang dilihat oleh profiler, ketika menjalankan kode countProduct

alt text

Kalau diperhatikan pada gambar dibawah, yang ditandai merah. Ada 3 kali penggunaan jaringan ketika kita menggunakan kode diatas.

alt text

Jadi code di atas OK?

Future

Wah, tampaknya EF masih perlu di-tweak lagi. Bagaimana caranya menjadikan OK? Salah satu caranya adalah dengan menggunakan library EntityFramework.Extended. Dan tentu saja kita cukup menggunakan NuGet. Cari package EntityFramework.Extended seperti pada gambar dibawah.

alt text

Setelah terpasang EntityFramework.Extended, kita dapat menggunakan future* method untuk tujuan ini. future* ditulis seperti itu, maksudnya ada banyak method untuk ini. Seperti Future, FutureFirstOrDefault dan FutureCount.

Sekarang kita rubah code diatas agar kita bisa menggunakan future* method ini.

< VB.NET >

alt text

< C# >

alt text

Future Profiler

Secara kode tidak terlihat pengaruhnya. Tapi dengan profiler, kita bisa melihat hanya ada satu network-round-trip untuk men-generated dan esekusi di SQL Server. Disini future method akan membuat query EF menjadi batch. Cukup satu execute untuk tiga query. Teknik ini akan berguna sekali dalam network yang padat dan load server yang banyak.

alt text

Penutup

Perlu diingat, tidak semua kode perlu dimodifikasi dengan future method ini. Tergantung flow dan berapa besar data yang diambil. Jadi walaupun ada tool seperti EF ini, tetap kita harus melihat dan memperhatikan apa yang terjadi agar aplikasi kita optimal.

Referensi

Perhatian! Code yang ditampilkan dalam tulisan ini merupakan ilustrasi dari yang ingin dipaparkan dan bukan production ready code. Sudah banyak kejadian karena asal meng-copy-and-paste tanpa mengerti code yang diambil itu ke dalam production. Selain itu perlu ada tambahan code dan test sebelum siap untuk digunakan secara utuh.