以下全部翻译自MSDN,有的用词可能不准确,请谅解。有兴趣的可以去查看英文原文。如果大家觉得还有用,我会继续写下去。
本人的英文水平很菜,中文水平也不高。如果有看不懂的地方,或者技术上需要探讨的(我无法保证翻译的完全正确)请提出来,以后有机会改正。希望大家能够共同提高。
关于执行程序性能调整的文章
VC只在专业版和企业版上支持性能测试(Profiling),至于为什么这样做,请参考微软的相关文章(Visual C++ Editions)。
性能测试相关的文章如下:
PREP
PROFILE
PLIST
Profiler Won’t Merge Statistics from Two Different Operating Systems on the Same Computer
Profiler Will not Profile DLLs That Are Freed, Then Reloaded
Onboard System Memory Cache and Disk Caches May Affect Profile Times
Profiling Windows NT Services
Error Writing to .PDB File After Line Profile Operation
PRB:Profiler Fatal Errors PRF1012 and PRF1306
PREP
PREP程序在一次正常的性能测试(Profiling)过程中会执行两次。第一次,它读取可执行文件(.EXE),然后会生成.PBI 和.PBT 文件。接着,它读取.PBT和.PBO文件并为PLIST程序生成一个新的.PBT文件。(译者注:PREP,PLIST和Profile都可以从命令行执行,当然,也可以通过VC的IDE从工程中执行Profile,三个可执行文件本身保存在VC的BIN目录下)。
语法
PREP [options] [programname1] [programname2...programname8]
PREP按照从左向右的顺序读取命令行,因此最右面的命令行参数有可能会覆盖左面与之相矛盾的命令行参数。所有的参数都是大小写不敏感的。不过你必须要为选项前加上(/) 或者(–)符号,并用空格将参数隔开。
参数
描述
options
参考下面的参数表。
programname1
主要需要进行性能测定的程序的文件名(后缀.DBG,.EXE,或者.DLL)。如果没有指定后缀名,PROFILE会认为后缀名是.EXE。这个参数在第一次使用PREP的时候必须使用。但第二次不是必须的。
programname2...
programname8
其他附加的需要进行性能测试的程序。这些参数只能在PREP第一次执行的时候指定。
下表中出现‘X’的地方,表明该参数仅在‘X’的阶段是可以使用的。
可选参数
PREP 第一次执行的时候可以从命令行或者是VC的IDE的Profiler对话框上进行指定,但第二次执行的时候,参数只能从命令行指定。
Option
I
II
Description
/AT
X
收集函数的执行时间和执行次数,以及函数间的调用关系。请参考稍后的/STACK参数。
/CB
X
当进行函数执行时间统计的时候使用,允许你进行时间误差的校准,该时间误差是你在执行性能统计(Profiling)的过程中进行函数时间统计的时候产生的时间误差。校准的时间误差被显示在缺省的PLIST输出中(其中不包括表分隔符)。
/EXC
X
在进行性能测试的时候,不测试指定的模块,或者是模块的一部分。例如/EXC test.cpp(9-18)。
/EXCALL
X
对所有的模块都不执行性能测试(参考后面的注意事项)。这个参数同/INC一起使用。
/FC
X
需要进行函数执行次数的性能测试。
/FT
X
需要进行函数执行时间的性能测试。这个参数会导致Profiler同时生成函数执行次数的信息。这个命令行参数是缺省的。
/FV
X
需要进行函数执行覆盖的性能测试。
/INC
X
指定需要执行性能测试的部分(参考后面的注意事项)。这个参数同/EXCALL一起使用。
/H[ELP]
X
X
提供关于PREP的参数的简单帮助信息。
/IO filename
X
将输出合并到一个已经存在的.PBO(PROFILE 的输出)。可以同时合并8个.PBO 文件。缺省的文件名是.PBO。
/IT filename
X
将输出合并到一个已经存在的.PBT(PROFILE 的输出)。可以同时合并8个.PBT文件。你可以合并使用不同性能测试方法生成的.PBT文件。缺省的文件后缀是.PBT。
/LC
X
选择一行进行执行次数的测试,需要花比较长的时间。
/LV
X
选择一行进行覆盖测试。
/M filename
X
/IT,/IO,和/OT三个参数的结合。
/NOLOGO
X
X
去掉PREP的版本信息。
/OI filename
X
生成一个.PBI文件。缺省的扩展名是.PBI。如果不指定/OI参数,那么输出的.PBT文件是“可执行程序名.PBT”。
/OM
X
生成一个后缀名是_XE或者是_LL自身可以进行性能测试的可执行文件,能自己记录函数的调用时间,调用次数,以及调用覆盖。不指定这个选项的话,可执行代码将保存在.PBI文件中。这个参数将加速性能测试。
/OT filename
X
X
指定要输出到的.PBT文件。缺省的文件后缀名是.PBT。如果不指定/OT参数,那么输出的.PBT文件是“可执行程序名.PBT”。
/SF function
X
从指定的函数开始性能测试。但是函数名必须响应.MAP文件中的一个入口点。
/STACK dpt
X
当使用了/AT参数后,你可以设定调用堆栈的深度(dpt)。
/?
X
X
提供关于PREP的参数的简单帮助信息。
环境变量
PREP
指定一个缺省的命令行参数。
如果没有指定PREP的环境变量,缺省的PREP参数是
/FT /OI filename /OT filename
其中filename 将设置成命令行参数programname1的值。
注意事项
参数/INC and /EXC是指定单独的库文件(.LIB),目标文件(.OBJ),以及源程序(.C,.CPP,或者.CXX)文件。用于对单独的程序行进行调用计数以及调用覆盖的统计。你可以像这样指定源程序的行数:
/EXCALL /INC test.cpp(3-41,50-67)
这个例子只进行源文件TEST.CPP中第3行到41行以及50到67行的性能测试。注意行数不包括源文件中的空行。
如果要指定源文件中的所有行,可以这样:
/EXCALL /INC test.obj
或者指定源文件中的行数为0,象这样:
/EXCALL /INC test.cpp(0-0)
下面的例子从源文件的第50行进行性能测试直到文件末尾:
/EXCALL /INC test.cpp(50-0)
PROFILE
PROFILE 应用程序执行对可执行程序的性能测试,并且生成一个.PBO来保存结果。当你使用PREP生成了.PBI文件以后,就可以使用PROFILE来进行性能测试了。
语法
PROFILE [options] programname [programargs]
PROFILE按照从左向右的顺序读取命令行,因此最右面的命令行参数有可能会覆盖左面与之相矛盾的命令行参数。所有的参数都是大小写不敏感的。不过你必须要为选项前加上(/) 或者(–)符号,并用空格将参数隔开。
如果你没有在命令行中指定.PBO的文件名,PROFILE将使用.PBI文件的基本名再加上.PBO的扩展名。如果你没有指定一个.PBI或者一个.PBO文件,PROFILE将使用应用程序的基本名再加上.PBI和.PBO的扩展名。
参数
描述
options
参考下面的可选参数。
programname
进行性能测试的可执行文件名。如果没有指定后缀名,默认是.EXE结尾的文件。请参考注意事项。
programargs
执行应用程序时的可选参数。请参考注意事项。
可选参数
Option
Description
/A
附加任何非直接的错误消息到一个已经存在的文件。如果/E 参数被指定了而/A参数没有指定,这个文件将被覆盖。这个参数只有在指定了/E参数的情况下才有效。
/E filename
将Profiler的错误信息发送到文件名filename指定的文件。
/H[ELP]
提供关于PROFILE的参数的简单帮助信息。
/I filename
指定从一个.PBI 文件中读取信息。这个文件必须时PREP生成的。
/NOLOGO
去掉PROFILE的版本信息。
/O filename
生成一个指定的.PBO文件。Use the PREP utility to merge with other .PBO files, or to create a .PBT file for use with PLIST.
/X
返回程序执行性能测试时的退出码。
/?
提供关于PROFILE的参数的简单帮助信息。
注意事项
你必须在PROFILE的命令行中指定进行性能测试的可执行文件的文件名。如果不指定扩展名,PROFILE将假设扩展名是.EXE。
你可以在文件名后加上可执行文件的命令行参数。
如果你是对一个动态链接库(.DLL)中的代码进行性能测试的时候,给出调用动态链接库的可执行文件(.EXE)名字。如果你想对SAMPLE.DLL进行性能测试,而这个动态库是由CALLER.EXE调用的,你可以这样做:
PROFILE CALLER.EXE
假设CALLER.PBI已经选中了SAMPLE.DLL来进行性能测试。要知道细节,请参考“对动态连接库进行性能测试”(Profile Dynamic-Link Libraries)。
环境变量
PROFILE
指定缺省的命令行参数。
如果PROFILE的环境变量没有指定,不存在缺省的可选参数。