Form Load Profiler: Single Form
Posted by bprasetio on September 1, 2008
Pada kesempatan ini saya ingin memaparkan bagaimana membuat pengukur lama proses (profiler) sederhana untuk mengukur waktu tayang (load-time) suatu form dari form tersebut di buat hingga benar – benar tampil dan siap digunakan.
Tunggu dulu, sabar, sebelum saya memaparkan triknya, perlu saya informasikan siklus bagaimana suatu form dibuat sampai dengan ditayangkan dan siap digunakan dan pada akhirnya sampai form itu ditutup dan dibebaskan dari memori.
1. Pembuatan Form (Form Creation: DFM Loading, Objects Construction, OnCreate Event)
2. Penayangan Form (Form Show: Form Painting, OnShow Event)
3. Aktivasi Form (Form Activate: Form Resizing, Form Painting, OnActivate Event)
4. Penggunaan Form (Form Usage)
5. Konfirmasi Penutupan Form (Form CloseQuery: OnCloseQuery)
6. Penutupan Form (Form Close: OnClose)
7. Penyembunyian Form (Form Hiding: OnHide)
8. Penghancuran Form (Form Destruction: OnDestroy)
Nah setelah kita mengetahui siklus pembuatan dan penayangan form, kita sudah bisa meraba akan diletakkan dimana pengkuran yang dilakukan. Ya, pengukuran dimulai dari pemanggilan constructor create yang diakhiri dengan setelah aktivasi form (activate).
Lalu bagaimana meletakkan awal pengukuran?
Mudahnya adalah dengan menyisipkan kode pada saat pemanggilan constructor create suatu form. Yaitu di dalam method contructor create, pada awal baris, sisipkan kode untuk menghitung waktu mulai proses, yaitu dengan menggunakan fungsi GetTickCount() yang hasilnya disimpan pada variabel FStart yang bertipe Cardinal.
Lalu bagaimana meletakkan akhir pengukuran?
Pengukuran diletakkan pada bagian paling akhir Form Activation, yaitu dengan menggunakan fungsi GetTickCount() yang hasilnya disimpan pada variabel FEnd yang bertipe Cardinal.
Teknik Penyisipan Kode
Pasti ada yang berpendapat bahwa kode disisipkan pada event OnCreate (awal pengukuran) dan onActivate (akhir pengukuran). Tidak. Peletakan pada event onCreate tidak mengukur rutin untuk membaca form DFM dan pembuatan komponen yang ada didalamnya. Dan penyisipan pada event onActivate juga demikian, tidak menjamin bahwa semua rutin sudah dilakukan. Lalu dimana?
Tentu saja di constructor Create. Kita perlu melakukan overriding constructor Create, menyisipkan kode pengukuran diatas segalanya, kemudian memanggil constructor yang sebenarnya (inherited).
Demikian pula untuk menyisipkan pengukuran akhir. Procedure Activate harus di-override dengan meletakkan kode pengukuran di bawah segalanya, dengan sebelumnya memanggil procedure Activate yang sebenarnya (inherited).
sehingga kode nya sebagai berikut:
unit SingleFormUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TSingleForm = class(TForm)
btnShowResult: TButton;
mmoLegend: TMemo;
stbMain: TStatusBar;
procedure btnShowResultClick(Sender: TObject);
private
{ Private declarations }
FStart, FEnd : Cardinal;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
procedure Activate; override;
end;
var
SingleForm: TSingleForm;
implementation
{$R *.dfm}
{ TSingleForm }
procedure TSingleForm.Activate;
begin
inherited;
FEnd := GetTickCount;
end;
procedure TSingleForm.btnShowResultClick(Sender: TObject);
begin
ShowMessage('Load Time : ' + IntToStr(FEnd - FStart));
end;
constructor TSingleForm.Create(AOwner: TComponent);
begin
FStart := GetTickCount;
inherited;
end;
end.
Sementara disain form-nya sebagai berikut:
Pengukuran secara otomatis akan dilakukan ketika aplikasi dijalankan. Klik tombol “Show Measurement Result” untuk melihat hasilnya.
Nah selesai, cukup mudah dan sederhana bukan?
Langkah pengembangan selanjutnya adalah bagaimana menerapkan pengukuran tersebut untuk semua form di aplikasi.
Simak lanjutannya di Bagian 2.
Semoga bermanfaat.




Form Load Profiler: Multiple Form « Bayu Prasetio’s Weblog said
[...] Form Load Profiler: Single Form [...]
Form Load Profiler: Multi Form: Class Helper « Bayu Prasetio’s Weblog said
[...] Comments Form Load Profiler: … on Form Load Profiler: Single…Aulia Bigwantara on Chrome Time !ridwan on Custom MessageDlg: Centered…bprasetio on [...]
Bayu Prasetio’s Blog » Blog Archive » Form Load Profiler: Multi Form: Class Helper said
[...] Jika Anda sudah lupa dengan form load profiler untuk form tunggal, silahkan disimak di sini: Form Load Profiler: Single Form [...]