0

我正在尝试检测我们的应用程序以寻找性能优化,但我无法从中获取任何数据。我主要对函数运行时间以及调用它们的次数感兴趣。

你能指出我的过程中的缺陷吗?

这是我所做的:

1.VSInstr MyAssembly.dll

这将创建仪表化的 dll(如两倍大小)并备份原始文件。我收到关于强名称事物的警告,所以第 2 步

2. sn -Ra MyAssembly.dll TheKeyFile.snk

说辞职成功

3. VsPerfCLREnv /traceon

设置环境变量

4. 运行程序。我就在我要调查的步骤之前进行。

5. VsPerfCmd /start:trace /output:../Reports/Report.vsp

开始跟踪

6.单击按钮执行该过程(应用程序创建)并等待完成

7. VSPerfCmd /shutdown

停止追踪。

8. VSPerfCLREnv /关闭

将环境重置为正常

最后,我检查了 Report.vsp 文件。这是一个 148KB 的文件,在 VS2017 中打开时会抛出这两个错误弹出窗口并且无法打开任何内容:

  • 文件不包含数据缓冲区
  • 分析报告失败
4

1 回答 1

0

解决方案是

  • 使用 /globaltraceon 代替 /traceon
  • 首先运行 VsPerfCmd /start:trace 之后才启动服务
  • 调用 VSPerfCmd /processon:[PID] 附加到进程
  • 完成后停止服务(否则 /shutdown 不会完成)

所以步骤看起来像这样:

  1. VSInstr MyAssembly.dll
  2. sn -Ra MyAssembly.dll TheKeyFile.snk
  3. VsPerfCLREnv /globaltraceon
  4. 在手动启动时设置服务
  5. 重启电脑
  6. VsPerfCmd /start:trace /output:Reports/Report.vsp
  7. 手动启动服务
  8. VsPerfCmd /processon:(在任务管理器中查找)
  9. 做任何你想测量的事情
  10. 停止服务
  11. VsPerfCmd /shutdown
于 2018-01-25T14:23:37.050 回答