Visual studio 2012 在分析软件中,为什么使用百分比而不是时间(毫秒)?
我和一位同事正在查看VS2012中的Visual Studio评测报告,他们问我,“为什么要使用百分比来表示方法中的持续时间或调用该方法所花费的时间?” 我的解释是,该工具提供了一些表示哪些方法/调用需要很长时间或方法的哪些部分需要很长时间的表示。现在,这可以是一个抽象(百分比)或绝对值(时间(毫秒)),但两者都足以指出应用程序中的问题区域Visual studio 2012 在分析软件中,为什么使用百分比而不是时间(毫秒)?,visual-studio-2012,profiling,theory,Visual Studio 2012,Profiling,Theory,我和一位同事正在查看VS2012中的Visual Studio评测报告,他们问我,“为什么要使用百分比来表示方法中的持续时间或调用该方法所花费的时间?” 我的解释是,该工具提供了一些表示哪些方法/调用需要很长时间或方法的哪些部分需要很长时间的表示。现在,这可以是一个抽象(百分比)或绝对值(时间(毫秒)),但两者都足以指出应用程序中的问题区域 我们对此并不特别信服,所以我想我应该问一下互联网。以毫秒为单位的时间会根据许多因素而变化-您的开发机器可能有四个处理器和32gb的RAM-但用户机器可能只有
我们对此并不特别信服,所以我想我应该问一下互联网。以毫秒为单位的时间会根据许多因素而变化-您的开发机器可能有四个处理器和32gb的RAM-但用户机器可能只有单核和1gb的RAM 一致性(通常是1)是“占用时间最长的位”-因此百分比可以帮助您确定代码中最慢的部分,这些部分是通过优化可以获得最多时间的部分
1不管编译器如何根据处理器优化代码。实际上,有些分析器除了百分比外,还提供绝对时间 真正的问题是这些计时有多有用,因为您可能会根据当前机器负载和当前机器的规格等情况获得不同的计时。另外,请记住,当您在探查器中运行代码时,它的运行速度将比未归档的运行速度慢,因此即使是探查的运行也不能准确反映真实的运行时间 由于这些原因,有些人可能认为绝对时间是无关的。如果您随后假设计时之间的变化是由某个数字乘以的,那么百分比就是要查看的数量。然后百分比将保留绝对时间之间的比率,因此,如果某个时间是绝对时间的两倍,则百分比将是绝对时间的两倍 当然,这个百分比并不完美,因为无法保证更改是乘法的(例如,开销是加法的)。目标是什么
我是Visual Studio Profiler团队的安德烈·汉密尔顿。这些值以百分比表示而不是以毫秒表示的原因是,您看到的是基于样本分析而不是基于检测的分析的报告 样本分析 基本上,操作系统将定期执行堆栈遍历。您在分析报告中看到的结果表示操作系统执行堆栈遍历时特定函数在堆栈上的时间比例 仪器配置 我们基本上修改二进制(静态或动态)并截取函数的开始和结束。然后,在启动和退出函数时,我们会获取一个时间戳。这将为您提供有关函数执行的精确信息,但这并不是没有成本的。因为信息是在每个函数进入和退出时获取的,所以生成的分析报告可能非常庞大(在程序执行的几秒钟内就有超过1GB的数据并非未知)。另外,如果在已签名的二进制文件上使用静态插装,则需要将其删除。这可能使开发过程复杂化。动态检测在这方面有所帮助,但这并不能节省数据开销。除非你特别寻找时间信息,否则采样确实是其他海报所表达的方式 供参考
Visual Studio附带用于静态检测的vsinstr(可在\Team Tools\Performance Tools中找到)。百分比很好。但是需要以毫秒为单位的时间。如果您必须比较执行相同任务的两个版本的软件,其中一个要比另一个长得多。百分比比在每个函数中花费的绝对时间更难比较。为什么不让我们选择看绝对时间的百分比
我很惊讶这还没有被提到。作为一个练习配置文件,一个JavaScript Windows应用商店应用程序和一个C#one。您会注意到,JavaScript包含ms信息,这是因为VS2012中的JavaScript分析是通过检测完成的,而托管Windows应用商店应用程序是通过采样完成的