Jumat, 19 Oktober 2012

Mengurangi Ukuran Aplikasi

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:

  • 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:


  • 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":


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."

  • 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.


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."  

  • 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. 

  • 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)

0 komentar:

Posting Komentar

 

© 2011 e - Tutorial | by Moeh Fitrah