回答
Visual Studio Team System配备了一个很好的分析器。 另外,Intel VTune也不错。
如果您使用的是Linux,那么我推荐组合ValGrind和CallGrind and KCacheGrind。 ValGrind是用于查找内存泄漏的极好方法,CallGrind扩展使其成为一款优秀的分析器。
注:我只是learned是Valgrind的,现在也适用于Mac OSX上。但是,CallGrind和KCacheGrind自2005年以来尚未更新。您可能需要查看other front-ends。
高兴你问:-)如果你不介意的逆势而上,检查这些答案:
设我试着去简而言之:
程序是否等待您,还是您等待它?如果它不能让你等待它,那么你没有问题,所以不要管它。
如果确实让您等待,请继续。
我推荐采样,这是获取频繁X射线的程序正在做什么,当它忙(不等你)。至少获取调用堆栈的样本,而不仅仅是程序计数器。如果你只能得到程序计数器的样本,如果你的程序在I/O或库程序中耗费大量时间,那么这将毫无意义,所以不要为此而解决。
如果你想获得大量的样本,你需要一个分析器。如果您只需要几个,调试器中的暂停按钮就可以正常工作。根据我的经验,20绰绰有余,5通常就足够了。
为什么?假设你有1000个样本的调用堆栈。每个样本代表一个挂钟时间,只是因为堆栈上的每一行代码都要求它,所以花费在之间。因此,如果在1000个样本中有557个样本出现一行代码,则可以假设它负责557/1000的时间,给出或接受几个样本(15)。这意味着,如果整个执行时间花费你100美元,那么这一行本身花费55.70美元,给出或拿1.50美元**,所以你应该看看是否真的需要它。
但是,您是否需要1000个样本?如果这条生产线花费了大约55.7%的时间,那么如果您只抽取了10个样本,您会在其中的6个样本上看到它,给出或抽取1.5个样本。因此,如果您在10个样本中的6个样本上看到了一个声明,那么您知道在100美元之外大概会花费45美元到75美元之间的费用。即使只花费45美元,你是不是想看看你是否真的需要它?
这就是为什么你不需要大量的样本 - 你不需要很多的准确性。你需要的是堆栈样本给你的东西 - 它们指向你正在最优化的最有价值的线上。
**样本数量的标准偏差为sqrt(f * (1-f) * nsamp)
,其中f
是包含该行的样本的分数。
非常感谢你这个非常有见地的帖子!有没有办法让lldb做这种随机暂停,这需要? – 2017-05-02 04:33:53
@Koz:我不知道Ildb。我只使用任何能够进行Ctrl-Break的调试器。 – 2017-05-02 11:43:17
为了完成,我会添加oprofile。如果您想要对内核进行基准测试,那将是特别有趣的。
- 1. 建议在d执行低级别库(相对于C/C++)
- 2. 关于编写代码的C++建议
- 3. C#关于排队的建议
- 4. 关于C++继承的建议
- 5. 关于优化C#代码的建议
- 6. 关于C++对象序列化技术的建议
- 7. .gitignore对于Android项目的建议
- 8. CMS对于教程博客的建议
- 9. 对于asp.net 2.0 DateTimepicker的建议
- 10. 对于免费XSLT工具的建议
- 11. 对C#数据库访问的建议
- 12. 对C++表格格式的建议
- 13. 对C#自定义tabcontrol的建议?
- 14. 建议用于使用目标C
- 15. 对ServiceStack.NET的建议
- 16. 建议对Eclipse的
- 17. 对json的建议
- 18. __attribute__((不建议使用))不适用于Objective-C协议方法?
- 19. Objective-C协议疯狂 - 如何基于协议返回对象?
- 20. 针对基于Web的远程构建系统的建议
- 21. 关于在C中构建错误代码查找的建议#
- 22. 关于在c中构建graphQL查询的建议#
- 23. 针对Windows Mobile 6的C/C++ HTTP客户端库的建议?
- 24. 关于Glyphicon Bug的建议?
- 25. 关于款式的建议
- 26. 关于MySQL表的建议
- 27. 关于标签的建议
- 28. 关于AsyncTask的建议
- 29. 关于抽象的建议
- 30. 对片段提议算法的建议
你使用的是什么编译器和操作系统? – LnxPrgr3 2009-11-25 05:25:21