Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.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
哪个是最可靠、最快的Windows C++;您使用过的分析器? 我需要在Windows上配置一个实时的C++应用程序。大多数可用的探查器要么非常昂贵,要么完全过量,要么两者兼而有之。我不需要任何.NET的东西。由于它是一个实时应用程序,我需要的剖析器要尽可能快。如果它以某种方式与VisualStudio2005/2008集成,那将是非常好的,但这不是必需的。如果这个描述让你想起你使用过的分析器,我真的很想知道它。我希望从人们在Windows上使用C++剖析器来找出一个能完成这项工作的人。谢谢_C++_Windows_Visual Studio_Profiler_Performance - Fatal编程技术网

哪个是最可靠、最快的Windows C++;您使用过的分析器? 我需要在Windows上配置一个实时的C++应用程序。大多数可用的探查器要么非常昂贵,要么完全过量,要么两者兼而有之。我不需要任何.NET的东西。由于它是一个实时应用程序,我需要的剖析器要尽可能快。如果它以某种方式与VisualStudio2005/2008集成,那将是非常好的,但这不是必需的。如果这个描述让你想起你使用过的分析器,我真的很想知道它。我希望从人们在Windows上使用C++剖析器来找出一个能完成这项工作的人。谢谢

哪个是最可靠、最快的Windows C++;您使用过的分析器? 我需要在Windows上配置一个实时的C++应用程序。大多数可用的探查器要么非常昂贵,要么完全过量,要么两者兼而有之。我不需要任何.NET的东西。由于它是一个实时应用程序,我需要的剖析器要尽可能快。如果它以某种方式与VisualStudio2005/2008集成,那将是非常好的,但这不是必需的。如果这个描述让你想起你使用过的分析器,我真的很想知道它。我希望从人们在Windows上使用C++剖析器来找出一个能完成这项工作的人。谢谢,c++,windows,visual-studio,profiler,performance,C++,Windows,Visual Studio,Profiler,Performance,当我必须分析实时代码时,我认为唯一的解决方案是手动操作。您不需要太多的覆盖,或者最终会减慢代码的速度,但是对于一个小的数据集,您需要非常专注,基本上是手动拾取每个点 因此,几年前我编写了一个头文件,它定义了一些宏和捕获数据的机制,可以是函数计时,也可以是时间线(函数X中的时间T)。该代码用于计时,并通过将数据写入命名共享内存,以便我可以查看来自另一个进程的实时计时数据 需要重新编译来更改我想要捕获的时间信息,但是代码非常便宜,实际上对代码没有任何影响 所有代码都在头文件中(带有宏保护,因此代码只

当我必须分析实时代码时,我认为唯一的解决方案是手动操作。您不需要太多的覆盖,或者最终会减慢代码的速度,但是对于一个小的数据集,您需要非常专注,基本上是手动拾取每个点

因此,几年前我编写了一个头文件,它定义了一些宏和捕获数据的机制,可以是函数计时,也可以是时间线(函数X中的时间T)。该代码用于计时,并通过将数据写入命名共享内存,以便我可以查看来自另一个进程的实时计时数据

需要重新编译来更改我想要捕获的时间信息,但是代码非常便宜,实际上对代码没有任何影响

所有代码都在头文件中(带有宏保护,因此代码只包含一次)。所以头文件本身就是我的“探查器”。我更改了标题中的一些表,然后标记目标代码,重新编译并开始分析

考虑到这个问题

关于绩效问题的常识是,衡量是发现问题的先决条件。
不是这样

如果您担心开销以及如何在DSP实时应用程序中实现这一点,我会这样做。让它以真实的输入运行,只需使用“暂停”按钮将其停止在轨迹中。将调用堆栈捕获到记事本中。然后再次启动并重复几次。(扔掉任何不相关的示例,比如等待用户输入或以其他方式处于空闲状态。)请注意,此过程对程序的评测开销为零

如果您的代码在计时器之外运行,并且实际运行的时间只占总时间的一小部分,那么a)您可以决定您实际上没有问题,或者b)您仍然可以尝试让它运行得更快。如果(b),则在代码周围环绕一个循环,这样无论它做什么,它都会重复10、100或1000次,使它花费足够多的时间,以便样本能够到达其中。使用这些示例找出要解决的问题,使其更快。完成后,移除外环,它将像强盗一样运行

由于它是一个实时应用程序,我需要的剖析器要尽可能快

我不知道你所说的实时(硬、半硬、软)是什么意思


我曾经不得不提高传真服务器的性能。传真协议是这样的,如果任何一端延迟太长(取决于几十或几百毫秒),则传真会话将断开。因此,我无法使用任何可用的商业分析器,因为它们太慢了服务器的执行:因此,我添加了各种日志消息(带有时间戳)来插入代码,从而找到瓶颈。

我们进行了大量的评测,并使用了Shark(仅限OSX),和最受欢迎的计数器/时钟

其中Shark绝对是最好的(而且是免费的!),我尽量让代码能够移植到OSX,这样我就可以用它来分析。不幸的是,它不符合您的要求

vTune完全不起眼,它太复杂了,如果不精通所有评测选项,就无法获得一个像样的评测,前端GUI经常崩溃或完全崩溃,而且它的采样器没有对调用堆栈进行采样,这使得它几乎无法实际查看程序中的瓶颈是如何产生的。它也很昂贵(尽管我们最终购买了许可证)。对其有利的是,它是跨平台的,您可以得到30天的试用期,看看您是否喜欢它

Glowcode相当不错,仅限IIRC windows,还提供免费试用。我们已经有一段时间没有使用它了,但这可能是一个不错的开始

我们的嵌入式代码大多使用时钟,它只运行一个进程,几乎没有系统开销——这意味着我们可以精确计算操作所花费的时钟周期数。就我个人而言,我不建议“滚动您自己的”评测代码(除非规模非常粗略),原因有二:

  • 很难说明进程是如何安排的以及正在运行哪些其他操作
  • 探查器通常会突出显示热点,如果没有它们的干预,您永远不会认为这些热点是热点

我使用了AMD CodeAnalyst,效果非常好,但它必须在AMD处理器上运行。如果你挖得够深,这更像是“告诉你的比你想知道的更多”。

我偶尔会使用一个名为Very Sleepy的应用程序:

这是一个简单、不起眼的工具,我不知道它有多适合你的需要。作为一个相当直接的采样分析器,它对我来说已经足够好了。我正在编写一个名为SlimTune的.NET探查器,它最终将获得本机支持——但它现在不在那里,可能需要几个月才能提供。

(来自软件验证,我工作的公司)似乎符合您的要求:

  • 采样和非采样模式
  • C,C++,Delphi,Windows ./LI>
同意。此外,如果不需要实时分析,只需将queryperformancecounter结果转储到历史缓冲区,并在程序结束时输出一个csv文件,其中的值转换为毫秒/微秒。Excel/OpenOffice也是一个令人惊讶的好工具