VSIntr没有收集数据

时间:2018-01-24 15:49:10

标签: c# dll profiling instrumentation vsperfmon

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

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

以下是我的工作:

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 / off

将环境重置为正常

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

  • 文件不包含数据缓冲区
  • 无法分析报告

1 个答案:

答案 0 :(得分: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