【问题标题】:Performance tuning using instrumentation model使用检测模型进行性能调优
【发布时间】:2009-03-10 13:48:55
【问题描述】:

如果我使用此处描述的检测模型来分析 .Net 应用程序性能,这意味着分析工具将更改要分析的可执行文件的可执行代码以插入性能测量代码?所以我原来的可执行代码被修改了?

http://msdn.microsoft.com/en-us/library/ms242753(VS.80).aspx

问候, 乔治

【问题讨论】:

    标签: .net profile instrumentation


    【解决方案1】:

    是的;插桩代码与未插桩代码不同。这意味着您必须稍微注意结果 - 但大多数分析器都会合理地将注意力集中在重要的部分上。我对采样选项从来没有太多的运气——不过,仪器通常很有用。就个人而言,我喜欢jetBrains 提供的服务。

    【讨论】:

    • 酷,马克!还有两个 cmets,1. 只需与您确认检测模式实际上会更改原始代码或可执行文件吗? 2.我发现jetBrains不是免费的,和VSTS内置的profiler相比还有优势吗?
    • 另一条评论,在采样模型中,有什么方法可以包括线程处于等待状态的时间?如果我没记错的话,采样模型不计算等待线程中的时间?因此,如果我的应用程序性能瓶颈总是在某个线程中等待,我永远无法从采样模型中得知?
    【解决方案2】:

    采样模式是当您知道代码中的热点区域时,它不会修改您的代码,它只会对所有正在运行的线程的当前调用堆栈进行采样.如果您的线程正在睡觉或等待资源(互斥体、事件等),那么它将被视为热点区域。您想使用此模式来测量负载。
    仪器模式(跟踪)将测量每种方法花费的时间(以周期为单位)。
    它需要检测您的代码(使用调试符号),但最终会排除它对系统造成的开销。您想使用此模式来测量单个过程。

    【讨论】:

      【解决方案3】:

      是的,在检测时,分析器将使用附加指令修改您的代码,以收集和跟踪必要的性能数据。您永远不会想要分发您的程序集的插桩版本,并且您不希望将插桩程序集用于调试目的(因为关键部分/竞争条件/等在附加插桩的情况下肯定会表现不同)。

      话虽如此,仪器对于分析旨在解决的目标非常有价值。通过收集实际数据并隔离昂贵的操作,可以适当地集中优化工作并准确衡量结果 - 避免浪费时间、增加复杂性、降低可维护性以及与过早优化相关的所有其他问题。

      【讨论】:

        猜你喜欢
        • 2010-12-20
        • 2018-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-03
        • 1970-01-01
        • 2020-08-24
        • 2021-06-12
        相关资源
        最近更新 更多