Home > Delphi, Did You Know > Form Load Profiler: Single Form

Form Load Profiler: Single Form


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:

Design Form

Design Form

Pengukuran secara otomatis akan dilakukan ketika aplikasi dijalankan. Klik tombol “Show Measurement Result” untuk melihat hasilnya.

Form Load Time Result

Form Load Time Result

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.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: