h1

Teknik pengiriman nilai antar page di ASP.NET

9 Juli 2009

Ketika penulis mulai bergelut dengan dunia web application – dimana penulis jarang menyentuhnya sejak kuliah dulu, tapi belakangan sangat menyenanginya – ada permasalahan yang sering penulis hadapi ketika mengirimkan nilai antar page di ASP.NET.

Penulis menemui beberapa cara untuk melakukan hal ini di ASP.NET. Artikel asli adalah ditulis oleh Steve C. Orr. Dengan judul “Data Passing Round-Up Compare Techniques for Passing Data between Web Pages: Which Are Best Under Diverse Circumstances?”

Disini penulis mencoba menuliskan dengan bahasa penulis dan pengalaman yang penulis alami.

Application State

HttpApplicationState adalah obyek classic ASP yang menyimpan nilai global atau obyek.

Sebagai contoh apabila Anda sering menggunakan obyek DataSet yang menyimpan data global, Anda dapat memilih menyimpannya dalam Application State. Penggunaannya sangat mudah, hanya dengan menuliskan baris perintah berikut :

C#

DataSet Source = (DataSet)(Application["MyDataSet"]);

VB.NET

Dim ds As DataSet = CType(Application("MyDataSet"), DataSet)

Cara mengambil nilainya pun mudah. Hal yang harus diperhatikan adalah Anda harus me-lock obyek Application sebelum menyimpan sebuah nilai dan me-unlock-nya setelah selesai. Hal ini memastikan tidak ada kejadian berupa thread yang mengupdate nilai dari Application State di saat yang sama. Hal ini juga digunakan untuk mencegah deadlocks.

‘VB.NET

Application.Lock()
Application("MyDataSet") = MyDataSet
Application.UnLock()

//C#

Application.Lock();
Application["MyDataSet"] = MyDataSet;
Application.UnLock();

Modifikasi obyek yang tersimpan dalam Application State tidak dapat secara otomatis dilakukan ke dalam Application State. Atau dengan kata lain saat Anda baru dapat memodifikasi DataSet setelah mengambil nilainya dari Application State, kemudian Anda harus menyimpannya kembali ke Application State.
Sebagai catatan penting, obyek Application State memiliki lingkup hanya untuk sebuah Web Application. Dengan kata lain, apabila Anda memiliki dua buah website ASP.NET di server, website kedua tidak dapat membaca nilai obyek Application State dari website pertama.
Cara ini jarang digunakan karena masalah manajemen memori yang belum dilakukan dengan baik. Disisi lain tidak diperlukan penyimpanan data secara global kecuali untuk string koneksi database, yang notabene dapat disimpan dalam registry, database itu sendiri ataupun menggunakan web.config.

Cache Object

Beberapa saat setelahnya diperkenalkan HttpCache. Seperti obyek HttpApplicationState, HttpCache merupakan “container” yang berfungsi untuk menyimpan variabel dan obyek global. Dengan menggunakan baris perintah sederhana yang mirip obyek Application State, dengan menghilangkan baris untuk melakukan locking dan unlocking karena manajemen thread telah built in ke dalam obyek, Anda dapat menyimpan dan mengambil nilai variabel/obyek global.

‘VB.NET

Cache("MyGlobalValue") = TextBox1.Text 'Store
Dim s As String = Cache("MyGlobalValue").ToString 'Retrieve

//C#

Cache["MyGlobalValue"] = TextBox1.Text; //Store
string s = Cache["MyGlobalValue"].ToString(); //Retrieve

Obyek Cache memiliki kelebihan yang tidak dimiliki obyek Application dimana pengaturan thread sudah dilakukan secara otomatis. Tentu saja hal ini memudahkan pengguna.

Obyek Cache mengimplementasikan teknik penyimpan yang lebih cerdas daripada obyek Application. Sebagai contoh :
Obyek Cache yang jarang diguanakan akan secara otomatis menghilangkan diri dari Cache bila kapasitas memori terkuras habis. Oleh karena itu digunakan parameter yang mengatur skala prioritas dari tiap obyek di dalam memori. Dengan menggunakan delegate CacheItemRemovedCallback, dapat ditambahkan informasi kapan obyek Cache harus dihapus dari memori.

Sebagai contoh kode di bawah ini akan menyimpan data ke dalam Cache dimana obyek tersebut akan expired dan dihapus dari memori setelah 20 menit

‘VB.NET

Cache.Insert("MyGlobalValue", TextBox1.Text, _
Nothing, System.Web.Caching.Cache.NoAbsoluteExpiration, _
New TimeSpan(0, 20, 0))

//C#

Cache.Insert("MyGlobalValue", TextBox1.Text,
null, System.Web.Caching.Cache.NoAbsoluteExpiration,
new TimeSpan(0, 20, 0));

Pengaturan “kadaluwarrsa” obyek cache juga dapat dilakukan dengan menggunakan berbagai macam cara lainnya. Sebagai contoh menggunakan event tertentu seperti ketika sebuah file berubah, obyek cache yang berhubungan dengan file tersebut juga ikut dihapus. Obyek cache juga dapat bergantung dengan obyek cache lainnya. Dengan menggunakan cara ini saat obyek “parent cache” dihapus, obyek “children cache” yang berhubungan dengannya akan ikut terhapus. Obyek CacheDependency merupakan kunci dari ini semua. Terdapat juga obyek SqlCacheDependency yang dapat menghapus obyek dari cache saat data tertentu dalam database SQL Server berubah.

Sama seperti obyek Application, obyek cache juga memiliki lingkup global pada Web Application. Obyek cache merupakan pilihan saat Anda “benar-benar” ingin menshare data dalam sebuah web application untuk semua user yang aktif. Hal ini dikarenakan manajemen thread yang lebih baik dan juga kemampuannya untuk mendestroy dirinya dari memori saat server mulai “kehabisan” memori.

Session State

Apabila obyek Application dan Cache digunakan untuk menyimpan data secara global, obyek Session secara khusus digunakan untuk menyimpan data spesifik untuk tiap pengguna. Perintah yang dipakai sangat sederhana :

‘VB.NET

Session("UserName") = TextBox1.Text 'Store
Dim s As String = Session("UserName").ToString 'Retrieve

//C#

Session["UserName"] = TextBox1.Text; //Store
string s = Session["UserName"].ToString();//Retrieve

Obyek Session hanya berlaku pada sebuah web application dan juga hanya pada user session tertentu. Dengan kata lain, apabila 2 pengguna mengunjungi website yang menggunakan baris perintah tersebut, username mereka akan disimpan secara terpisah dan mereka tidak dapat melihat username satu sama lainnya.

Seperti obyek Application dan Cache, session  disimpan dalam memori server. Akan tetapi obyek session kan menghabiskan memori user apabila banyak pengguna yang menggunakan session variabel. Analoginya apabila ada menyimpan 10 obyek session untuk tiap pengguna dan website Anda diakses oleh 100 pengguna secara bersamaan, akan terbentuk 1000 obyek di dalam memori. Pemecahannya adalah di versi ASP.NET menyediakan konfigurasi sebuah aplikasi yang menyimpan data session ke dalam database SQL Server dengan mengkonfigurasi file web.config.

Sekian dulu sharing dari penulis… masih ada beberapa obyek yang dapat Anda manfaatkan untuk parsing nilai antar page. Penulis akan melanjutkan dilain kesempatan. Salam

Iklan

2 komentar

  1. keren loh mas, artikel artikel di blogmu…. searching and rewrite sendiri yah


    • Terimakasih. Saya cuma meneruskan apa yang ditulis penulis aslinya kok. Saya memakai blog sebagai catatan pribadi dan mudah2an bermanfaat bagi teman2 yang membacanya.



Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: