我试图在从VS单元测试工具运行它时对我的.NET dll进行配置,但是我遇到了问题。我正在使用独立的命令行分析器,因为VS2008 Professional没有内置的分析器。
我有一个开放的CMD窗口,并且运行了以下命令(我之前对其进行了检测,这就是为什么vsinstr发出了警告:)
C:\...\BusinessRules\obj\Debug>vsperfclrenv /samplegclife /tracegclife /globalsamplegclife /globaltracegclife
Enabling VSPerf Sampling Attach Profiling. Allows to 'attaching' to managed applications.
Current Profiling Environment variables are:
COR_ENABLE_PROFILING=1
COR_PROFILER={0a56a683-003a-41a1-a0ac-0f94c4913c48}
COR_LINE_PROFILING=1
COR_GC_PROFILING=2
C:\...\BusinessRules\obj\Debug>vsinstr BusinessRules.dll
Microsoft (R) VSInstr Post-Link Instrumentation 9.0.30729 x86
Copyright (C) Microsoft Corp. All rights reserved.
Error VSP1018 : VSInstr does not support processing binaries that are already instrumented.
C:\...\BusinessRules\obj\Debug>vsperfcmd /start:trace /output:foo.vsp
Microsoft (R) VSPerf Command Version 9.0.30729 x86
Copyright (C) Microsoft Corp. All rights reserved.
C:\...\BusinessRules\obj\Debug>
然后我运行了运行检测代码的单元测试。单元测试完成后,我做了......
C:\...\BusinessRules\obj\Debug>vsperfcmd /shutdown
Microsoft (R) VSPerf Command Version 9.0.30729 x86
Copyright (C) Microsoft Corp. All rights reserved.
Waiting for process 4836 ( C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\vstesthost.exe) to shutdown...
显然在等待VS2008关闭所以我关闭了它......
Shutting down the Profile Monitor
------------------------------------------------------------
C:\...\BusinessRules\obj\Debug>
一切都很好,目录中有一个3.2mb的foo.vsp文件。我接下来做了......
C:\...\BusinessRules\obj\Debug>vsperfreport foo.vsp /summary:all
Microsoft (R) VSPerf Report Generator, Version 9.0.0.0
Copyright (C) Microsoft Corporation. All rights reserved.
VSP2340: Environment variables were not properly set during profiling run and managed symbols may not resolve. Please use vsperfclrenv before profiling.
File opened
Successfully opened the file.
A report file, foo_Header.csv, has been generated.
A report file, foo_MarksSummary.csv, has been generated.
A report file, foo_ProcessSummary.csv, has been generated.
A report file, foo_ThreadSummary.csv, has been generated.
Analysis completed
A report file, foo_FunctionSummary.csv, has been generated.
A report file, foo_CallerCalleeSummary.csv, has been generated.
A report file, foo_CallTreeSummary.csv, has been generated.
A report file, foo_ModuleSummary.csv, has been generated.
C:\...\BusinessRules\obj\Debug>
注意有关环境变量的警告并使用vsperfclrenv?但我跑了!也许我使用了错误的开关?我不知道。无论如何,将csv文件加载到Excel或使用perfconsole工具可以提供大量有用信息和无用的符号名称:
*** Loading commands from: C:\temp\PerfConsole\bin\commands\timebytype.dll
*** Adding command: timebytype
*** Loading commands from: C:\temp\PerfConsole\bin\commands\partition.dll
*** Adding command: partition
Welcome to PerfConsole 1.0 (for bugs please email: joshwil@microsoft.com), for help type: ?, for a quickstart type: ??
> load foo.vsp
*** Couldn't match to either expected sampled or instrumented profile schema, defaulting to sampled
*** Couldn't match to either expected sampled or instrumented profile schema, defaulting to sampled
*** Profile loaded from 'foo.vsp' into @foo
>
> functions @foo
>>>>> Function Name
Exclusive Inclusive Function Name Module Name
-------------------- -------------------- -------------- ---------------
900,798,600,000.00 % 900,798,600,000.00 % 0x0600003F 20397910
14,968,500,000.00 % 44,691,540,000.00 % 0x06000040 14736385
8,101,253,000.00 % 14,836,330,000.00 % 0x06000041 5491345
3,216,315,000.00 % 6,876,929,000.00 % 0x06000042 3924533
<snip>
71,449,430.00 % 71,449,430.00 % 0x0A000074 42572
52,914,200.00 % 52,914,200.00 % 0x0A000073 0
14,791.00 % 13,006,010.00 % 0x0A00007B 0
199,177.00 % 6,082,932.00 % 0x2B000001 5350072
2,420,116.00 % 2,420,116.00 % 0x0A00008A 0
836.00 % 451,888.00 % 0x0A000045 0
9,616.00 % 399,436.00 % 0x0A000039 0
18,202.00 % 298,223.00 % 0x06000046 1479900
我非常接近能够找到瓶颈,只要它能给我功能和模块名称而不是十六进制数字!
我做错了什么?
--- Alistair。
答案 0 :(得分:2)
原因是我没有在定义环境变量的同一个进程中运行可执行文件。它是需要访问环境变量的检测代码,而不是分析器。
所以我在使用vsperfclrenv之后直接从命令行运行了VS2008,这一切都运行了,我有我的函数名。
可悲的是,我仍然遇到Schema错误,这意味着我无法深入了解调用树,但我至少设法识别出这个特定的瓶颈。
--- Alistair。
答案 1 :(得分:0)
有几种可能的尝试(请注意,我不是命令行分析器的专家 - 我一次只使用它几次):
您选择的选项取决于您使用的三种类型的分析中的哪一种:采样,检测或全局。
在vsperfclrenv
的通话中,您可以选择所有3种类型的分析 - 我建议您选择一种类型开始使用,如果可行则继续前进,但您想尝试其他类型如果他们的工作做得更好,可以看看。
您可能还需要为符号指定位置(即使未使用vsperfclrenv
完成此操作)。可以使用_NT_SYMBOLS_PATH
环境变量或/SymbolPath
的{{1}}选项(或通过将.pdb文件放在与二进制文件相同的位置)来配置符号位置。有关详细信息,请参阅"How to: Specify Symbol File Locations from the Command Line"。