Stand-alone Profiler for VS2005

本文介绍如何在Visual Studio 2005 Professional Edition中使用独立的性能测试工具集进行性能采样。文章详细说明了从配置环境变量到生成分析文件的全过程,并提供了具体的命令行操作步骤。

I’m using VS2005 Professional Edition that doesn’t include Performance Test Tool set. So I have to download & install the stand-alone Performance tool set. It requires a lot of manual work:

(I am using Sampling mode instead of Tracing mode because I think sampling is enough)

0. Put the performance tool binary path into the environment variable “path”

1. Build your application with “/profile” enabled

2. Start the ‘elevated command prompt’ from Accessories by “Running as Administrator” in Win7 – or you will suffer from privilege problems

3. Go into your application dir and run “vsperfcmd /start:sample /output:XXX.vsp /launch:XXX.exe”

4. After your application is done its work, run “vsperfcmd /shutdown”. You will get a .vsp file after this

5. Generate your analysis files: “vsperfreport /summary:all XXX.vsp”.

6. Check out the resulted csv files

方法“/** * 性能测量装饰器工厂函数 * @param moduleName - 模块名 * @param methodName - 方法名(可选,默认为被装饰方法名) * @returns 方法装饰器 * * @remarks * 支持同步和异步方法的性能测量 * 自动处理异常情况,确保测量不会影响正常业务逻辑 * 集成采样率检查,在测量开始前即决定是否进行性能测量 */ export function measurePerformance(moduleName: string, methodName?: string): MethodDecorator { return (target: unknown, propertyKey: string | symbol, descriptor: PropertyDescriptor): PropertyDescriptor => { const originalMethod: unknown = descriptor.value; const profiler: PerformanceProfiler = PerformanceProfiler.getInstance(); const config: ProfilerConfig = profiler.getConfig(); // 使用方法名或属性键作为方法名 const actualMethodName: string = methodName || String(propertyKey); // 重新定义方法 descriptor.value = function (...args: unknown[]): unknown { // 在开始时即进行采样判断,避免不必要的性能开销 if (Math.random() >= config.samplingRate) { if (typeof originalMethod === 'function') { return originalMethod.apply(this, args); } return undefined; } const handle: number = profiler.start(moduleName, actualMethodName); try { // 处理原始方法调用 if (typeof originalMethod !== 'function') { profiler.end(handle); return undefined; } const result: unknown = originalMethod.apply(this, args); // 处理异步方法 if (result instanceof Promise) { return result.finally(() => { profiler.end(handle); }); } else { // 同步方法 profiler.end(handle); return result; } } catch (error) { // 确保异常情况下也结束测量 profiler.end(handle); throw error; } }; return descriptor; };” 代码行“ return (target: unknown, propertyKey: string | symbol, descriptor: PropertyDescriptor): PropertyDescriptor => {”报错Use explicit types instead of "any", "unknown" (arkts-no-any-unknown) <ArkTSCheck>和"Symbol()" API is not supported (arkts-no-symbol) <ArkTSCheck> 代码行“ const originalMethod: unknown = descriptor.value;”报错Use explicit types instead of "any", "unknown" (arkts-no-any-unknown) <ArkTSCheck> 代码行“ descriptor.value = function (...args: unknown[]): unknown {”报错Use arrow functions instead of function expressions (arkts-no-func-expressions) <ArkTSCheck>和Use explicit types instead of "any", "unknown" (arkts-no-any-unknown) <ArkTSCheck>和Use explicit types instead of "any", "unknown" (arkts-no-any-unknown) <ArkTSCheck> 代码行“ return originalMethod.apply(this, args);”报错"Function.apply", "Function.call" are not supported (arkts-no-func-apply-call) <ArkTSCheck>和Using "this" inside stand-alone functions is not supported (arkts-no-standalone-this) <ArkTSCheck> 代码行“ const result: unknown = originalMethod.apply(this, args);”报错Use explicit types instead of "any", "unknown" (arkts-no-any-unknown) <ArkTSCheck>和"Function.apply", "Function.call" are not supported (arkts-no-func-apply-call) <ArkTSCheck>和Using "this" inside stand-alone functions is not supported (arkts-no-standalone-this) <ArkTSCheck> 代码行“ throw error;”报错"throw" statements cannot accept values of arbitrary types (arkts-limited-throw) <ArkTSCheck>如何修正?
最新发布
09-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值