Để gỡ lỗi/kiểm tra hiệu suất Tôi muốn tự động thêm mã đăng nhập vào tất cả các trình xử lý sự kiện của các thành phần của một loại đã cho vào lúc chạy.Làm thế nào tôi có thể tự động chèn mã vào trình xử lý sự kiện trong Delphi?
Ví dụ, đối với tất cả Tập dữ liệu trong một Datamodule, tôi cần chạy mã trong các sự kiện BeforeOpen
và AfterOpen
để nắm bắt thời gian bắt đầu và để ghi lại thời gian đã trôi qua trong AfterOpen.
Tôi muốn làm điều này động (không có phân lớp thành phần), để tôi có thể thêm điều này vào tất cả các mô hình và biểu mẫu hiện có với nỗ lực tối thiểu chỉ khi cần. Việc thay đổi tất cả các thành phần và lọc theo loại của chúng là dễ dàng, nhưng đối với các thành phần đã được gán sự kiện, tôi cần một cách để lưu các trình xử lý sự kiện hiện có và gán trình xử lý sự kiện mới được sửa đổi. đăng nhập và sau đó sẽ gọi mã gốc đã có sẵn.
Vì vậy, mã này
procedure TMyDatamodule.OnBeforeOpen(Sender: TDataset);
begin
SomeProc;
end;
tại thời gian chạy sẽ trở thành
procedure TMyDatamodule.OnBeforeOpen(Sender: TDataset);
begin
StoreStartTime(Sender); // injected code
SomeProc;
end;
Có một mẫu thiết kế có thể được áp dụng, hoặc thậm chí một số mã ví dụ trong đó cho thấy làm thế nào để thực hiện điều này trong Delphi?
Bạn không đề cập đến DBMS bạn đang sử dụng. Nhưng với tư cách là một cách tiếp cận hoàn toàn khác, bạn có cân nhắc sử dụng DB Profiler không? Ví dụ. Sử dụng trình biên dịch SQL Server, bạn có rất nhiều tính linh hoạt và có thể thấy các chi tiết bên trong không được bao hàm bởi BeforeOpen/AfterOpen. –