似乎Ants剖析器在完全相同的时间进行了检测和代码采样,我发现它非常有趣
我使用了VS分析器,你必须运行两个不同的配置文件会话来识别瓶颈 - ANTS如何捕获IO绑定函数调用而无需修改代码并将代码注入编译函数?
编辑:蚂蚁是使用仪器还是采样?
Ants剖析器提供了几种不同的剖析模式,其中一些使用采样,其中一些使用仪器(仪器模式仅在专业版中可用,并且采样模式最近才引入).这里有可用模式的简要描述,以及不同模式之间的比较.
RedGate没有公布有关他们的探查器如何工作的技术细节,但是从实验中我没有发现与其他探查器的工作方式有任何显着差异(只是一个不同的用户界面,我确信在某些区域或边缘特征中有优化在其他分析器中不可用).基于你的问题,我猜你对其他的探查者有点熟悉,但是如果你对它在较低层次的工作方式感兴趣,这里有一个简短的概述:
在采样模式下,探查器将定期运行OS中断以暂停程序执行,并检查程序当前所处的方法.二进制或中间语言程序集中的每个方法都包含一个指令集.执行程序时,每个线程都将沿着该指令集前进,在调用方法时跳转到不同的指令集位置.线程执行的当前位置可以作为指向该指令集中位置的指针,您可以找到该地址是针对给定方法的指令集.因此,探查器会为方法名称构建指令集位置的映射,当它暂停程序时,它会检查当前执行的位置.通过将其映射到方法名称,它可以计算调用方法的次数以及运行的时间.但由于这只是一个示例,可能还有其他方法被调用,我们没有注意到,因为它们在我们在下一个时间间隔暂停程序之前返回.
在检测模式下,探查器将向程序的指令集中注入其他指令.假设您有一个A->B->C在调用doSomething()方法时调用的指令集.一个非常粗略的剖析器可以注入额外的指令来做类似的事情
long starttime = currentTime()
A
B
C
long endtime = currentTime() - starttime
Run Code Online (Sandbox Code Playgroud)
这将告诉您运行该方法需要多长时间.当然,现代剖析器会做更精细的指令,以优化性能,获得每行性能,获取内存和IO信息以及时序信息等,但原理是相同的.
现代操作系统也具有获得硬件级诊断的良好能力,因此分析器可以获得有关大多数系统的更详细信息,包括内存,磁盘IO,CPU利用率等.这些不同的系统如何工作是非常设备和特定于司机.
请注意,此注入可以在各个阶段完成 - 在源级别,在执行之前的二进制级别,在运行时等.特别是对于像C#这样的语言,编译和程序集执行之间存在中间阶段(CLR),在运行时注入这些附加指令更容易.它还允许您在运行时使用自定义指令包围内部.NET框架中的方法(例如我认为您要询问的IO操作),这样即使您没有原始源,也可以获得性能信息码.这再次依赖于它能够构建从指令集到方法名称的映射,但不同之处在于您仍然可以注入其他指令而无需采样.我认为可以采取特殊的预防措施来使这一点变得更加困难,但微软没有真正的动机去做.NET框架的内部.
| 归档时间: |
|
| 查看次数: |
1299 次 |
| 最近记录: |