【发布时间】:2009-03-10 13:48:55
【问题描述】:
如果我使用此处描述的检测模型来分析 .Net 应用程序性能,这意味着分析工具将更改要分析的可执行文件的可执行代码以插入性能测量代码?所以我原来的可执行代码被修改了?
http://msdn.microsoft.com/en-us/library/ms242753(VS.80).aspx
问候, 乔治
【问题讨论】:
标签: .net profile instrumentation
如果我使用此处描述的检测模型来分析 .Net 应用程序性能,这意味着分析工具将更改要分析的可执行文件的可执行代码以插入性能测量代码?所以我原来的可执行代码被修改了?
http://msdn.microsoft.com/en-us/library/ms242753(VS.80).aspx
问候, 乔治
【问题讨论】:
标签: .net profile instrumentation
是的;插桩代码与未插桩代码不同。这意味着您必须稍微注意结果 - 但大多数分析器都会合理地将注意力集中在重要的部分上。我对采样选项从来没有太多的运气——不过,仪器通常很有用。就个人而言,我喜欢jetBrains 提供的服务。
【讨论】:
采样模式是当您知道代码中的热点区域时,它不会修改您的代码,它只会对所有正在运行的线程的当前调用堆栈进行采样.如果您的线程正在睡觉或等待资源(互斥体、事件等),那么它将被视为热点区域。您想使用此模式来测量负载。
仪器模式(跟踪)将测量每种方法花费的时间(以周期为单位)。
它需要检测您的代码(使用调试符号),但最终会排除它对系统造成的开销。您想使用此模式来测量单个过程。
【讨论】:
是的,在检测时,分析器将使用附加指令修改您的代码,以收集和跟踪必要的性能数据。您永远不会想要分发您的程序集的插桩版本,并且您不希望将插桩程序集用于调试目的(因为关键部分/竞争条件/等在附加插桩的情况下肯定会表现不同)。
话虽如此,仪器对于分析旨在解决的目标非常有价值。通过收集实际数据并隔离昂贵的操作,可以适当地集中优化工作并准确衡量结果 - 避免浪费时间、增加复杂性、降低可维护性以及与过早优化相关的所有其他问题。
【讨论】: