Ketika pengurangan ukuran
aplikasi merupakan hal yang penting, ada beberapa cara yang dapat Anda gunakan
untuk membuat coding Anda lebih ringkas. Selain untuk mengurangi ukuran
aplikasi di memori, hampir semua teknik optimasi berikut juga akan mengurangi
ukuran file .exe. Seperti keuntungan yang saling melengkapi, sebuah aplikasi
dengan ukuran yang lebih kecil akan lebih cepat diload ke memori.
Banyak teknik optimasi menggunakan cara dengan menghapus bagian elemen yang tidak penting dari coding, sementara Visual Basic secara otomatis menghapus elemen-elemen tersebut ketika Anda meng-compile aplikasi Anda, sehingga tidak ada alasan untuk membatasi panjang atau jumlah dari elemen-elemen berikut ini, karena sama sekali tidak berpengaruh dengan ukuran aplikasi:
Banyak teknik optimasi menggunakan cara dengan menghapus bagian elemen yang tidak penting dari coding, sementara Visual Basic secara otomatis menghapus elemen-elemen tersebut ketika Anda meng-compile aplikasi Anda, sehingga tidak ada alasan untuk membatasi panjang atau jumlah dari elemen-elemen berikut ini, karena sama sekali tidak berpengaruh dengan ukuran aplikasi:
- Nama-nama pengenal (Identifier names)
- Komentar (Comments)
- Baris kosong (Blank lines).
Tidak ada satupun efek dari elemen-elemen di atas mempengaruhi ukuran dari
aplikasi Anda di memori ketika dijalankan sebagai file .exe.
Elemen-elemen lain, seperti variables, forms, dan prosedur, memakan banyak tempat di memori. Ada beberapa cara yang dapat Anda gunakan untuk mengurangi penggunaan memori yang digunakan oleh aplikasi Anda ketika dijalankan sebagai file exe. Cara ini juga dapat mengurangi ukuran coding Anda:
Elemen-elemen lain, seperti variables, forms, dan prosedur, memakan banyak tempat di memori. Ada beberapa cara yang dapat Anda gunakan untuk mengurangi penggunaan memori yang digunakan oleh aplikasi Anda ketika dijalankan sebagai file exe. Cara ini juga dapat mengurangi ukuran coding Anda:
- Kurangi Jumlah Form yang Diload.
- Kurangi Jumlah Control.
- Gunakan Label Menggantikan TextBox.
- Biarkan Data di File Tersimpan di Disk, dan Di-load Ketika Dibutuhkan Saja.
- Atur/Organisasikan Module Anda.
- Pertimbangkan Alternatif untuk Menggunakan Data Bertipe Variant.
- Gunakan Array Dinamik dan Hapus Jika Tidak Digunakan.
- Kosongkan Alokasi yang Digunakan oleh String Atau Variabel Object.
- Hapus "Dead Code" dan Variabel yang Tidak Pernah Digunakan.
Berikut penjelasan setiap
butir di atas.
- Kurangi Jumlah Form yang Diload
Setiap form yang diload, apakah kelihatan atau tidak, memakan sejumlah memori
(bervariasi dengan jumlah dan tipe dari control yang ada di form, ukuran
bitmaps di form, dan sebagainya). Gunakanlah perintah untuk menge-load form
hanya jika Anda ingin menampilkannya, dan gunakanlah perintah untuk meng-unload
form (daripada menyembunyikannya (Hide)) ketika Anda sudah tidak
membutuhkannya. Ingatlah, bahwa referensi apapun yang berkaitan kepada
properties, methods, atau controls di sebuah form, atau sebuah variabel yang
terdapat di suatu form yang dideklarasikan sebagai New, menyebabkan Visual
Basic me-load form tersebut.
Ketika Anda meng-unload sebuah form menggunakan metode Unload, hanya bagian dari memori yang digunakan oleh form ini yang dibebaskan. Untuk membebaskan semua memori, hilangkan referensi ke form tersebut dengan menggunakan kata kunci "Nothing":
Ketika Anda meng-unload sebuah form menggunakan metode Unload, hanya bagian dari memori yang digunakan oleh form ini yang dibebaskan. Untuk membebaskan semua memori, hilangkan referensi ke form tersebut dengan menggunakan kata kunci "Nothing":
Code::
|
Set Form = Nothing
|
- Kurangi Jumlah Control
Ketika Anda membuat aplikasi, cobalah untuk menempatkan sedikit mungkin control
dalam sebuah form. Jumlah control sebenarnya tergantung pada tipe control dan
juga sistem yang digunakan, tapi pada umumnya, form yang memiliki banyak
control di dalamnya akan memperlambat dalam pemunculan. Cara untuk mengatasi
hal ini adalah dengan menggunakan control array sebisa mungkin, daripada
membuat banyak control yang memiliki tipe sama di dalam sebuah form pada saat
pendisainan form.
Untuk informasi lebih lanjut mengenai control arrays, lihat "Working with Control Arrays" dalam "Using Visual Basic’s Standard Controls."
Untuk informasi lebih lanjut mengenai control arrays, lihat "Working with Control Arrays" dalam "Using Visual Basic’s Standard Controls."
- Gunakan Label menggantikan TextBox
Kontrol Label menggunakan sumber daya Windows lebih sedikit dibandingkan
TextBox, jadi sebaiknya gunakanlah Label untuk menggantikan TextBox sebisa
mungkin. Sebagai contoh, jika Anda membutuhkan sebuah control yang bersifat
hanya untuk menampilkan teks di dalam sebuah form, akan lebih efisien dengan
menggunakan Label.
Bahkan sebuah form entri data yang membutuhkan banyak TextBox dapat menggunakan cara ini. Anda dapat membuat sebuah Label untuk setiap field dan hanya menggunakan sebuah TextBox untuk entri data, pindahkan TextBox ini ke lokasi Label berikutnya ketika Textl mendapat event LostFocus. Untuk membuktikannya, buatlah satu project baru dengan satu form. Tambahkan 3 Label, 1 TextBox, dan 1 Commandbutton ke dalam form tersebut. Buat ukuran ketiga label sama dengan ukuran textbox, lalu copy-kan coding berikut ke editor form yang bertalian.
Bahkan sebuah form entri data yang membutuhkan banyak TextBox dapat menggunakan cara ini. Anda dapat membuat sebuah Label untuk setiap field dan hanya menggunakan sebuah TextBox untuk entri data, pindahkan TextBox ini ke lokasi Label berikutnya ketika Textl mendapat event LostFocus. Untuk membuktikannya, buatlah satu project baru dengan satu form. Tambahkan 3 Label, 1 TextBox, dan 1 Commandbutton ke dalam form tersebut. Buat ukuran ketiga label sama dengan ukuran textbox, lalu copy-kan coding berikut ke editor form yang bertalian.
Code::
|
Dim i As Integer Private Sub Command1_Click() If MsgBox("Data yang Anda isikan: " & vbCrLf & _
"Label1 = " & Label1.Caption & vbCrLf & _
"Label2 = " & Label2.Caption & vbCrLf & _
"Label3 = " & Label3.Caption, _
vbInformation + vbYesNo, "Simpan") = vbYes Then
MsgBox "Data telah disimpan!", vbInformation, "OK"
Else
EditData
End If
End Sub Private Sub Form_Load() i = 0
Text1 = ""
Command1.Caption = "&Simpan"
Label1 = "": Label2 = "": Label3 = "" Label1.BorderStyle = 1
Label2.BorderStyle = 1
Label3.BorderStyle = 1
Text1.Move Label1.Left, Label1.Top
End Sub Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text1_LostFocus
End Sub Private Sub Text1_LostFocus() i = i + 1
If i = 0 Then
'Update Label1
Label1.Caption = Text1.Text
'Pindahkan Textbox ke Label pertama
Text1.Move Label1.Left, Label1.Top
'Update isi Text1
Text1.Text = Label1.Caption
Text1.SetFocus ElseIf i = 1 Then
'Update Label1
Label1.Caption = Text1.Text
'Pindahkan Textbox ke Label berikutnya
Text1.Move Label2.Left, Label2.Top
'Update isi Text1
Text1.Text = Label2.Caption
ElseIf i = 2 Then
'Update Label1 Label2.Caption = Text1.Text
'Pindahkan Textbox ke Label berikutnya
Text1.Move Label3.Left, Label3.Top
'Update isi Text1
Text1.Text = Label3.Caption
ElseIf i = 3 Then
'Update Label1
Label3.Caption = Text1.Text
'Sembunyikan Text1, karena ini terakhir
Text1.Visible = False
'Update isi Text1 dgn Label1 jika ingin diulang
Text1.Text = Label1.Caption
End If
End Sub Sub EditData() i = -1 'Kembali lagi dari awal, agar menjadi 0 '(-1 + 1)... Text1.Visible = True
Text1_LostFocus 'Panggil prosedur Text1_LostFocus
End Sub |
Anda dapat membuat sebuah Label seperti tampilan TextBox dengan mengeset property BackColor dan BorderStyle. Walaupun cara ini membutuhkan coding (lihat di dalam prosedur Form_Load di atas), hal ini dapat mengurangi sumber daya yang digunakan untuk sebuah form yang memiliki banyak field TextBox.
- Biarkan Data di File Tersimpan di Disk, dan Di-load Ketika Dibutuhkan Saja
Data yang langsung dimasukkan ke dalam aplikasi Anda saat design time (seperti
property atau seperti string dan bilangan yang dimuat langsung di source code)
memerlukan memory di aplikasi saat run time. Anda dapat mengurangi memori
dengan me-load data dari file atau sumber lainnya tersebut saat run-time. Hal
yang sama juga berlaku untuk variabel berupa gambar bitmaps dan strings.
Untuk informasi lebih lanjut mengenai cara menambahkan sumber daya ke aplikasi Anda, lihat "Resource Files" pada "Advanced Programming Features."
Untuk informasi lebih lanjut mengenai cara menambahkan sumber daya ke aplikasi Anda, lihat "Resource Files" pada "Advanced Programming Features."
- Atur/Organisasikan Module Anda
Visual Basic me-load Module hanya saat ada "permintaan", itulah
mengapa, aplikasi me-load sebuah module ke memori hanya ketika coding memanggil
sebuah prosedur yang terdapat di dalam module tersebut. Jika Anda tidak pernah
memanggil sebuah prosedur yang terdapat di suatu module, Visual Basic tidak
akan pernah juga me-load module ini. Menempatkan beberapa prosedur yang saling
berhubungan dalam satu module yang sama menyebabkan Visual Basic akan me-load
satu module ini di saat diperlukan saja. Sangat efisien, bukan?
- Pertimbangkan Alternatif untuk Menggunakan Data Bertipe Variant
Data dengan tipe Variant secara umum memang fleksibel, tetapi data ini juga
lebih besar dibandingkan dengan data tipe lainnya. Ketika Anda harus
memperhitungkan akibat penggunaan setiap byte yang tersisa di aplikasi Anda,
pertimbangkanlah untuk mengganti data bertipe Variant -- khususnya juga array
bertipe Variant -- dengan tipe data lainnya.
Sebuah data yang bertipe Variant menggunakan tempat 16 bytes, dibandingkan dengan 2 bytes untuk yang bertipe Integer, dan 8 bytes untuk bertipe Double. Variabel String menggunakan 4 bytes ditambah 1 byte setiap karakternya di string, tetapi setiap data Variant yang terdiri atas sebuah string memerlukan 16 bytes ditambah 1 byte setiap karakternya di dalam string tersebut. Karena data variant sangat besar, variabel Variant yang bertipe string sering membuat masalah ketika digunakan sebagai variabel Local atau argumen ke sebuah prosedur, karena banyak menggunakan ruang stack.
Bagaimanapun dalam beberapa kasus, menggunakan data bertipe lainnya "memaksa" Anda untuk menambahkan lebih banyak coding untuk menggantikan ke-fleksibilitas-an yang terdapat pada tipe data Variant, sehingga secara murni bisa dikatakan tidak ada pengurangan ukuran aplikasi yang berarti.
Sebuah data yang bertipe Variant menggunakan tempat 16 bytes, dibandingkan dengan 2 bytes untuk yang bertipe Integer, dan 8 bytes untuk bertipe Double. Variabel String menggunakan 4 bytes ditambah 1 byte setiap karakternya di string, tetapi setiap data Variant yang terdiri atas sebuah string memerlukan 16 bytes ditambah 1 byte setiap karakternya di dalam string tersebut. Karena data variant sangat besar, variabel Variant yang bertipe string sering membuat masalah ketika digunakan sebagai variabel Local atau argumen ke sebuah prosedur, karena banyak menggunakan ruang stack.
Bagaimanapun dalam beberapa kasus, menggunakan data bertipe lainnya "memaksa" Anda untuk menambahkan lebih banyak coding untuk menggantikan ke-fleksibilitas-an yang terdapat pada tipe data Variant, sehingga secara murni bisa dikatakan tidak ada pengurangan ukuran aplikasi yang berarti.
- Gunakan Array Dinamik dan Hapus Jika Tidak Digunakan
Pertimbangkanlah untuk menggunakan array dinamis menggantikan array statik
(berukuran tetap). Ketika Anda tidak lagi membutuhkan data yang tersimpan di
sebuah array dinamis, gunakan "Erase" atau "ReDim Preserve"
untuk menghapus data yang sudah tidak dibutuhkan, dan bebaskan/kembalikan
memori yang digunakan oleh array. Atau sebagai contoh, Anda apat membebaskan
ruang yang digunakan oleh array dinamis dengan coding berikut ini:
Code::
|
Erase MyArray
|
Sementara menggunakan "Erase" untuk menghapus array, ReDim Preserve membuat array bisa lebih kecil tanpa harus kehilangan isinya:
Code::
|
ReDim Preserve MyArray(10, smallernum)
|
Menghapus sebuah array statik tidak akan mengembalikan atau membebaskan memori yang digunakan oleh array tersebut — tapi hanya menghilangkan nilai dari setiap elemen array ini. Jika setiap elemen array merupakan string, atau sebuah data bertipe Variant yang di dalamnya mengandung sebuah array string, maka menghapus array akan mengembalikan memori dari string atau data Variant itu, bukan memori yang digunakan oleh array tersebut.
- Kosongkan Alokasi yang Digunakan oleh String atau Variabel Object
Ruang yang digunakan oleh variabel string Local (non Statik) dan variabel
array, secara otomatis dibebaskan ketika prosedur ini selesai. Tetapi, variabel
string dan array global yang dideklarasikan di dalam module tetap ada selama
program Anda dijalankan. Jika Anda tetap berusaha untuk menjaga agar ukuran
aplikasi sekecil mungkin, Anda harus membebaskan ruang yang digunakan oleh
variabel-variabel ini segera setelah digunakan. Anda membebaskan ruang yang
digunakan oleh string ini dengan cara membuat string kosong (panjangnya nol):
Code::
|
SomeStringVar = "" 'Bebaskan ruang spasi yang digunakan |
Sama dengan hal tersebut, Anda dapat membebaskan beberapa (tapi tidak semua) dari ruang yang digunakan oleh sebuah variabel object dengan mengesetnya menjadi "Nothing". Sebagai contoh, untuk menghapus sebuah variabel object bertipe Recordset, dapat dilakukan dengan cara:
Code::
|
Private rs As New RecordSet
… '<-- Coding untuk inisialisasi dan penggunaannya di sini... rs.Close 'Tutup Recordset Set rs = Nothing 'Set referensi ke objek tersebut menjadi Nothing |
Jika Anda tidak mengeset secara explisit variabel object menjadi Nothing, sebuah referensi ke objek tersebut akan tetap ada di memori sampai aplikasi Anda selesai dijalankan; dan untuk sebuah aplikasi yang menggunakan banyak objek seperti ini, dapat mengakibatkan banyak memakan memori dan memperlambat dalam performansi aplikasi.
Anda juga dapat membebaskan ruang dengan cara meng-unload form dan mengeset-nya menjadi "Nothing" daripada menyembunyikannya dengan "Hide", sementara mereka sudah tidak dibutuhkan lagi.
- Hapus "Dead Code" dan Variabel yang Tidak Pernah Digunakan
Ketika Anda membangun dan memodifikasi aplikasi Anda, mungkin Anda menyisakan
"dead-code", yaitu prosedur yang tidak pernah dipanggil dari coding
manapun di aplikasi Anda. Mungkin juga Anda telah mendeklarasikan variabel yang
tidak pernah digunakan. Walaupun Visual Basic menghapus konstanta yang tidak
pernah digunakan, hal ini tidak menghapus variabel yang tidak digunakan
tersebut beserta "dead-code" ketika Anda membuat aplikasi Anda
menjadi sebuah file exe. Pertimbangkan dalam menemukan dan menghapus prosedur
dan variabel yang tidak pernah digunakan. Sebagai contoh, statement Debug.Print
diabaikan ketika run-time .exe, kadang-kadang digunakan setelah menjadi file
exe.
Statement Debug.Print dengan string atau variabel seperti argument tidak dicompile ketika Anda membuatnya menjadi file exe. Bagaimanapun, ketika statement Debug.Print milik sebuah fungsi yang dipanggil sebagai argument, statement Debug.Print ini akan diabaikan oleh compiler, tetapi pada pemanggilan fungsi tetap ikut dicompile. Kemudian, ketika aplikasi dijalankan, fungsi ini dipanggil, tetapi hasil pengembaliannya diabaikan karena fungsi yang tampak sebagai argument untuk Debug.Print akan "mengangkat" ruang dan siklus waktu dalam sebuah file exe, hal ini mungkin berguna untuk menghapus statement tadi sebelum Anda membuat menjadi file exe.
Gunakan perintah Find di menu Edit untuk mencari referensi ke sebuah variabel. Atau, jika Anda menggunakan statement "Option Explicit" dalam setiap module/form, Anda dapat dengan cepat menemukan jika sebuah variabel digunakan di aplikasi Anda dengan cara menghapus atau menutupnya dengan komentar di pendeklarasiannya, lalu coba jalankan aplikasi Anda. Jika variabel tersebut digunakan, Visual Basic akan menampilkan pesan kesalahan, sedangkan jika Anda tidak menemukan pesan kesalahan, berarti variabel tersebut tidak digunakan.
Untuk informasi lebih lanjut mengenai statement Debug.Print, lihat "Printing Information in the Immediate Window" pada "Debugging Your Code and Handling Errors."
Sumber: MSDN Library - Januari 2000 (Reducing Code Size)
Statement Debug.Print dengan string atau variabel seperti argument tidak dicompile ketika Anda membuatnya menjadi file exe. Bagaimanapun, ketika statement Debug.Print milik sebuah fungsi yang dipanggil sebagai argument, statement Debug.Print ini akan diabaikan oleh compiler, tetapi pada pemanggilan fungsi tetap ikut dicompile. Kemudian, ketika aplikasi dijalankan, fungsi ini dipanggil, tetapi hasil pengembaliannya diabaikan karena fungsi yang tampak sebagai argument untuk Debug.Print akan "mengangkat" ruang dan siklus waktu dalam sebuah file exe, hal ini mungkin berguna untuk menghapus statement tadi sebelum Anda membuat menjadi file exe.
Gunakan perintah Find di menu Edit untuk mencari referensi ke sebuah variabel. Atau, jika Anda menggunakan statement "Option Explicit" dalam setiap module/form, Anda dapat dengan cepat menemukan jika sebuah variabel digunakan di aplikasi Anda dengan cara menghapus atau menutupnya dengan komentar di pendeklarasiannya, lalu coba jalankan aplikasi Anda. Jika variabel tersebut digunakan, Visual Basic akan menampilkan pesan kesalahan, sedangkan jika Anda tidak menemukan pesan kesalahan, berarti variabel tersebut tidak digunakan.
Untuk informasi lebih lanjut mengenai statement Debug.Print, lihat "Printing Information in the Immediate Window" pada "Debugging Your Code and Handling Errors."
Sumber: MSDN Library - Januari 2000 (Reducing Code Size)
0 komentar:
Posting Komentar