Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2012 在分析软件中,为什么使用百分比而不是时间(毫秒)?_Visual Studio 2012_Profiling_Theory - Fatal编程技术网

Visual studio 2012 在分析软件中,为什么使用百分比而不是时间(毫秒)?

Visual studio 2012 在分析软件中,为什么使用百分比而不是时间(毫秒)?,visual-studio-2012,profiling,theory,Visual Studio 2012,Profiling,Theory,我和一位同事正在查看VS2012中的Visual Studio评测报告,他们问我,“为什么要使用百分比来表示方法中的持续时间或调用该方法所花费的时间?” 我的解释是,该工具提供了一些表示哪些方法/调用需要很长时间或方法的哪些部分需要很长时间的表示。现在,这可以是一个抽象(百分比)或绝对值(时间(毫秒)),但两者都足以指出应用程序中的问题区域 我们对此并不特别信服,所以我想我应该问一下互联网。以毫秒为单位的时间会根据许多因素而变化-您的开发机器可能有四个处理器和32gb的RAM-但用户机器可能只有

我和一位同事正在查看VS2012中的Visual Studio评测报告,他们问我,“为什么要使用百分比来表示方法中的持续时间或调用该方法所花费的时间?”

我的解释是,该工具提供了一些表示哪些方法/调用需要很长时间或方法的哪些部分需要很长时间的表示。现在,这可以是一个抽象(百分比)或绝对值(时间(毫秒)),但两者都足以指出应用程序中的问题区域


我们对此并不特别信服,所以我想我应该问一下互联网。

以毫秒为单位的时间会根据许多因素而变化-您的开发机器可能有四个处理器和32gb的RAM-但用户机器可能只有单核和1gb的RAM

一致性(通常是1)是“占用时间最长的位”-因此百分比可以帮助您确定代码中最慢的部分,这些部分是通过优化可以获得最多时间的部分


1不管编译器如何根据处理器优化代码。

实际上,有些分析器除了百分比外,还提供绝对时间

真正的问题是这些计时有多有用,因为您可能会根据当前机器负载和当前机器的规格等情况获得不同的计时。另外,请记住,当您在探查器中运行代码时,它的运行速度将比未归档的运行速度慢,因此即使是探查的运行也不能准确反映真实的运行时间

由于这些原因,有些人可能认为绝对时间是无关的。如果您随后假设计时之间的变化是由某个数字乘以的,那么百分比就是要查看的数量。然后百分比将保留绝对时间之间的比率,因此,如果某个时间是绝对时间的两倍,则百分比将是绝对时间的两倍

当然,这个百分比并不完美,因为无法保证更改是乘法的(例如,开销是加法的)。

目标是什么

  • 只是为了测量你可以放在powerpoint上的时间?或者

  • 找出如何使整个过程花费更少的时间?(而不仅仅是在速度更快的芯片上运行。)

  • 如果目标是(2),那么要做的事情就是在软件中查找a)占大量挂钟时间的活动,以及b)严格来说没有必要的活动。 原因是,如果你能摆脱一个占时间分数X(比如50%)的活动,那么你得到的加速因子就高达1/(1-X)或两倍

    我在这里谨慎地使用“活动”这个词,因为这是一个非常普遍的概念。 如果你只认为自己在寻找“慢动作”,你就会错过大的加速机会,而如果你真的关心性能,那是你无法承受的

    关键是加速机会就像石头一样。它们有倍数,大小不一。如果你不把每一个都拿走,你就会和那些你没有得到的一起生活。 例如,如果其中有三个,当删除它们时,它们可以节省50%、25%和12.5%,那么如果您同时执行这三个操作,则会获得8倍的加速比。不错。 但是,如果你错过了其中的一个,你就无法接近它

    探查器应该是岩石发现者,但如果他们错过了一个,你怎么知道呢? 如果探查器的输出看起来令人印象深刻,但似乎并没有表明您实际上可以修复多少,这是否意味着没有? 不。
    我是Visual Studio Profiler团队的安德烈·汉密尔顿。这些值以百分比表示而不是以毫秒表示的原因是,您看到的是基于样本分析而不是基于检测的分析的报告

    样本分析 基本上,操作系统将定期执行堆栈遍历。您在分析报告中看到的结果表示操作系统执行堆栈遍历时特定函数在堆栈上的时间比例

    仪器配置 我们基本上修改二进制(静态或动态)并截取函数的开始和结束。然后,在启动和退出函数时,我们会获取一个时间戳。这将为您提供有关函数执行的精确信息,但这并不是没有成本的。因为信息是在每个函数进入和退出时获取的,所以生成的分析报告可能非常庞大(在程序执行的几秒钟内就有超过1GB的数据并非未知)。另外,如果在已签名的二进制文件上使用静态插装,则需要将其删除。这可能使开发过程复杂化。动态检测在这方面有所帮助,但这并不能节省数据开销。除非你特别寻找时间信息,否则采样确实是其他海报所表达的方式

    供参考
    Visual Studio附带用于静态检测的vsinstr(可在\Team Tools\Performance Tools中找到)。

    百分比很好。但是需要以毫秒为单位的时间。如果您必须比较执行相同任务的两个版本的软件,其中一个要比另一个长得多。百分比比在每个函数中花费的绝对时间更难比较。为什么不让我们选择看绝对时间的百分比


    我很惊讶这还没有被提到。

    作为一个练习配置文件,一个JavaScript Windows应用商店应用程序和一个C#one。您会注意到,JavaScript包含ms信息,这是因为VS2012中的JavaScript分析是通过检测完成的,而托管Windows应用商店应用程序是通过采样完成的