分析意即在执行过程中收集程序参数。 在分析过程中,测量执行时间、单独函数的调用次数和程序代码行数。 利用这个工具,程序员可以找到并优化最慢的代码段。
性能分析既能够在交易平台的正常图表上执行,也能够在策略测试中使用历史数据。第一种情况下,程序将在实时更新的图表上启动。您可以在真实条件下检查程序的表现。而第二种情况下,程序会在可视模式下的策略测试中启动。这种方法的优点是您无需等待交易服务器的真实数据或某些交易条件的发生。
许多程序,尤其是指标,只能在新报价进入时执行计算(OnTick,OnCalculate)。因此,为了评估性能,您必须等候新的实时报价。当使用历史数据进行分析时,您可以立即提供所需的加载并测试程序性能,即使是在市场关闭的周末也可以进行。
分析使用的是“抽样”方法。分析工具在MQL程序操作中暂停(每秒~10 000次),并收集有关在特定代码部分出现暂停次数的统计信息。这包括对调用堆栈的分析,以确定每个函数对总代码执行时间的“贡献”。在分析结束后,您会收到有关执行暂停次数以及每个函数出现在调用堆栈中的次数的信息:
抽样是一种轻量型且准确的方法。与其他方法不同,抽样不会对分析的代码做出任何更改,因为这可能会影响其运行速度。
默认情况下,程序在当前打开的图表上运行以进行分析。如果对历史数据进行分析,则使用策略测试的当前设置。您可以使用MetaEditor选项来设置指定任何其他图表或重新定义一些测试器设置。
同一设置部分可以在编译期间启用或禁用函数内联。在内联期间,函数代码被直接添加到函数调用站,这使得在某些情况下可以显著加速程序。但是,此过程会使函数分析变得困难。您可以禁用内联以获得有关“纯”函数的报告。
此选项仅禁用显式内联。由编译器隐式生成的函数仍然可以使用。这类函数以[inlined]前缀显示。
可以禁用代码优化模式,以便在性能分析报告中包含更多详细信息。没有优化的代码速度可能会慢几倍,但是此模式可提供更广泛的代码覆盖范围。请注意,如果不进行优化,代码瓶颈可能不准确。
优化管理选项也可在项目设置中获得。
打开程序的源代码(MQ4 或 MQ5)。 在 调试 菜单或 标准 工具栏里, 按 "开始依据真实数据分析" 或 "开始依据历史数据分析"。
然后,将自动编译用于分析的特别程序版本。取决于选定的分析类型,程序将在交易平台的正常图表或策略测试器(以可视模式)上启动。
|
启动后,与应用程序一起工作一段时间,以便最大限度地尝试所有功能。 这对于分析器测量所有程序的函数和行数的执行时间是必要的。
然后停止分析: 从图表中删除程序,或单击 位于 调试 菜单或在 标准 工具栏里的停止分析。
为了获得更准确的性能分析结果,建议手工从图表中删除程序,而不是使用停止分析命令。 |
分析完成后,结果将显示在“工具箱”窗口的分析工具选项卡中。该结果还直接显示在代码中:突出显示含有相应函数的行。突出显示的亮度越高,完成该函数所需的时间就越长。此功能可以快速直观地发现程序的瓶颈。
分析报告以函数或程序行的形式显示,每个函数或程序行都有两个指标:
该值显示为绝对数量和占总量的百分比。
默认情况下,列表显示位于顶层的大型函数。双击函数行,切换到小型函数。
可以使用两种模式查看分析报告:根据调用和根据行。第二种方法能够以最多的细节发现代码,并且不仅可以识别最慢的函数,还可以识别此类函数最慢的部分。使用快捷菜单在模式之间切换。
为了方便起见,MQL语言的各种元素在报告中显示为图标:
除了这些类型的函数之外,分析工具还显示:
要查看行号和该函数所在文件的路径,请将鼠标光标悬停在报告中的相应行上。要查看文件中的函数,请双击文件。
分析器不显示所有函数,只显示程序操作期间调用的那些函数。 |
快捷菜单中有如下命令: