对于性能测试,我需要一种方法来度量表单从DFM加载其定义所需的时间。所有现有窗体都继承自定义窗体类。
要捕获当前时间,这个基类需要覆盖作为“扩展点”的方法:
反序列化
Loaded过程来实现)OnFormCreate事件之前
因此,TMyForm.Create(nil)的日志可能如下所示:
- 00.000 instance created
- 00.010 before deserialization
- 01.823 after deserialization
- 02.340 before OnFormCreate哪种TObject (或TComponent)方法最适合?也许在表单创建过程中还有其他扩展点,请随时提出建议。
背景:对于一些具有非常基本结构的应用程序表单(包括一些PageControls和QuantumGrids),我意识到不是数据库访问和OnFormShow中的其他东西,而是大部分时间(大约2秒)花费的构造,这让我想知道这段时间是在哪里度过的。作为一个引用对象,我还将构建一个模拟表单,它具有类似的结构,但没有代码或数据模式连接,并测量它的创建时间。
发布于 2010-03-14 15:42:48
TObject.NewInstance.是“实例创建”的最佳位置。
在Delphi2009中,TCustomForm.InitializeNewForm.是“反序列化前”的最佳位置。如果这是不可用的,请覆盖TCustomForm.CreateNew,并在它返回之前抓住时间。
您正确地认为,TComponent.Loaded.是“反序列化后”的最佳位置
对于“在TObject.AfterConstructor之前”的,重写OnFormCreate,并在调用继承的方法之前立即获取时间。如果您想要构建的总时间,在继承的调用返回之后获取最后的时间。这将包括OnFormCreate和任何初始激活时间。或者,如果不覆盖其他任何地方,则可以重写TForm.DoCreate,。
发布于 2010-03-14 14:02:47
假设表单的DFM加载是表单构造的主要时间部分,我们可以向表单中添加一个构造函数,如下所示:
constructor TMyForm.Create( AOwner: TComponent );
var
S, E: Int64;
begin
QueryPerformanceCounter( S );
inherited Create( AOwner ); // here is the dfm loading
QueryPerformanceCounter( E );
// Log using the classname and the time in QPC ticks.
LogQPCTime( ClassName, E - S );
end;https://stackoverflow.com/questions/2442127
复制相似问题