Arsip

Archive for Agustus, 2014

3 Hal Dasar Meningkatkan Kinerja Applikasi Menggunakan C#

29 Agustus 2014 1 komentar

Seringkali dalam membuat sebuah applikasi user mengeluhkan mengenai kinerja yang lambat dari applikasi tersebut. Tahukah anda terkadang kita sering kali menyepelekan beberapa hal yang menurut sebagian programmer terutama programmer pemula bahwa hal tersebut tidaklah penting, namun hal ini jika kita terapkan dapat mempengaruhi kinerja dari applikasi yang akan kita buat.
Dalam tulisan saya kali ini saya akan menjelaskan 3 hal dasar yang mungkin bermanfaat untuk meningkatkan kinerja applikasi yang sedang dikembangkan.

 

1 Boxing dan Unboxing

Variabel itu dibagi berdasarkan 2 type, variable berdasarkan value dan variable berdasarkan referensi,  valueType adalah variable yang mengacu pada nilai dari variable tersebut sedangkan referenceType adalah variable yang mengacu pada type data dari variable tersebut. Terkadang sering kali kita mengirimkan variable berbasis value  namun sebenarnya yang dibutuhkan adalah variable reference. C# telah memiliki teknologi yang dapat merubah valuetype menjadi reference type yang dinamakan boxing dan unboxing. Boxing adalah proses konversi variable valuetype menjadi reference type (object) , ketika CLR menemukan variable value maka akan dibungkus ke variable object (boxing) didalam heap,  dan kemudian meng-extract variable tersebut (Unboxing), Boxing itu implicit sedangkan Unboxing explicit. Hal ini dilakukan karena C# memiliki pandangan bahwa variable type apapun dapat diperlakukan sebagai object. Hal yang dilakukan CLR adalah :

  • Mengalokasikan variable object (didalam heap)
  • Menyalin data yang terdapat pada valuetype kedalam object tersebut.

Contoh :

int i = 10;
int j = 15;
Console.WriteLine(“Print Nilai : {0}, {1}”, i, j);

Mungkin kita sering kali menuliskan kode tersebut dan terasa familiar, namun sebenarnya hal dilakukan pada saat compile adalah :

int i = 10;
int j = 15;
object  obj1 = i;
object  obj2 = j;
Console.WriteLine(“Print Nilai : {0}, {1}”, obj1.ToString(), obj2.ToString());

Anda pasti kaget melihat kode tersebut padahal anda merasa tidak menulisnya seperti itu, hal ini dikarenakan C# akan melakukan Boxing dan Unboxing terhadap kode tersebut. Dan ini akan menciderai performance dari applikasi. Untuk menghidari hal tersebut sebaiknya kita melakukan ToString() pada fungsi WriteLine(), karena Write line membutuhkan variable ref.

Console.WriteLine(“Print Nilai : {0}, {1}”, i.ToString(), j.ToString());

 

2. StringBuilder

Dalam C# string sebenarnya adalah immutable(kekal) dan tidak dapat dirubah, ketika kita melakukan perubahan string maka sebenarnya kita membuat variable string baru, yang menggunakan memory yang lebih banyak dari yang dibutuhkan, contoh :

string msg = “Total Harga : ”; // object string1 created
msg = msg + “Rp. 10.000”; // object string 2 create
msg = msg + DateTime.Now; //object string3 create

dari kode diatas sebenarnya kita membuat 3 object string dan C# sebenarnya tidak melakukan perubahan pada variable tersebut, namun menambahkannya pada memory. Untuk memanipulasi data tersebut sebaiknya menggunakan StringBuilder. StringBuilder itu seperti string yang nilainya barisi karakter berurutan. Sekali kita membuat variable StringBuilder, kita dapat melakukan append, remove, replace bahkan menambahkan karakter. Sebaiknya anda merubah kode diatas menjadi:

StringBuilder sb = new StringBuilder();
sb.Append(“Total Harga :”);
sb.Append(“Rp. 10.000”);
sb.Append(DateTime.Now.ToString());

 

3. “As” vs “Cast”

Seorang programmer yang baik kadang menghindari proses perubahan type data pada variable, namun terkadang hal ini sering kali tidak dapat dihindari. Untuk melakukan konversi sebaiknya sedapat mungkin menggunakan metode As dibandingkan dengan Casting, karena hal ini lebih aman dan lebih efisien pada saat runtime. Untuk menggunakan metode casting anda harus menulis seperti ini :

object o = new object();
try
{
TypeBaru m = (TypeBaru) o;
if (m != null)
{
// Jalankan operasi disini
} else {
// report jika variable tersebut null
}
} catch {
// Report error konversi
}

sedangkan dengan menggunakan metode As kode yang akan ditulis menjadi seperti ini :

object o = new object();
TypeBaru m = o as TypeBaru;
if (m != null)
{
// Jalankan operasi disini
} else {
// report jika variable tersebut null
}

kode tersebut diatas sebenarnya sama, hanya saja dengan metode “as” akan melemparkan variable null jika object tersebut tidak dapat di konversi, sedangkan jika menggunakan cast maka akan melemparkan error jika tidak dapat dikonversi.

Kategori:.NET Framework