回答
我发现以下非常有用:
#ifdef PROFILING
# define PROFILE_CALL(x) do{ \
const DWORD t1 = timeGetTime(); \
x; \
const DWORD t2 = timeGetTime(); \
std::cout << "Call to '" << #x << "' took " << (t2 - t1) << " ms.\n"; \
}while(false)
#else
# define PROFILE_CALL(x) x
#endif
可以在调用函数被用作这样的:
PROFILE_CALL(renderSlow(world));
int r = 0;
PROFILE_CALL(r = readPacketSize());
从本质上讲,如果剖析工具不可用,那么您就可以模拟剖析器将会完成的工作。您可以将计数器插入到您认为有趣的函数中,并计算多少次,并计算它们被调用的大小/种类的参数。
如果你有机会到你的平台上的所有计时器,您就可以开始/之初/结束阻止这些说函数来获取执行时间信息为好,如果这是从代码不清楚。这将给你在复杂代码中最大的压力,因为通常会有太多的函数来测试它们。相反,您可以通过为每个代码分配一个计时器来获取代码的某些部分所花费的时间。
这两种串联技术可以形成一种迭代方法,您可以在其中找到大量使用定时器消耗大部分循环的代码,然后以更精细的粒度对各个函数进行处理以磨练问题。
如果是东西足够长的持续时间(例如一分钟以上),我运行该软件在调试器则打破了几次,看看那里的调试器中断,这给软件就是一个非常粗略的想法直到(例如,如果你打破10次,他们都在同一个地方,这告诉你一些有趣的事情!)。 非常粗糙,准备好,但不需要任何工具,仪器仪表等
不开玩笑:除倾销定时到std ::法院和面向方法我也用了蜂鸣()函数其他文本/数据。听到两个“哔哔”检查站之间的沉默间隙有些东西可以让人产生不同的印象。
这就像看一个书面乐谱,居然听到了音乐的区别。这就像读取rgb(255,0,0)和看到消防车红色之间的差异。
所以,现在我有一个客户端/服务器应用程序,并使用不同频率的蜂鸣声,标记客户端发送消息的位置,服务器在哪里启动应答,完成应答,应答首先进入客户端等,我可以很自然地感受到时间花在哪里。
真是个好主意。 – 2008-11-13 00:44:06
我会使用80/20法则,把周围的热点或有趣的调用路径定时器。您应该对瓶颈(或至少大部分执行路径)的位置有一个总体思路,并使用适当的平台相关高分辨率定时器(QueryPerformanceCounters,gettimeofday等)。
我通常不与任何在启动或关机(除非需要),并具有明确定义的“咽喉要道”,通常是消息传递或某种算法计算的麻烦。我通常发现消息接收器/ srcs(sinks moreso),队列,互斥锁和简单的混乱(算法,循环)通常会占据执行路径中的大部分延迟。
我不确定你有什么样的平台,但是在嵌入式微控制器上,使用示波器,计数器/定时器或逻辑分析仪来旋转备用数字输出线和测量脉冲宽度有时很有用。
您是否使用Visual Studio?
您可以使用/ Gh和/ GH开关。 Here's an example involving stack inspection
这些标志允许您逐个文件地注册每次输入方法和/或在运行时留下的未调用函数。
然后,您可以注册分析信息的所有时间,而不仅仅是时间信息。堆栈转储,调用地址,返回地址等。这很重要,因为您可能想知道'函数X在函数Z下使用了Y时间',而不仅仅是函数X中花费的总时间。
- 1. 您使用哪些技术来最大化代码重用?
- 2. 我可以使用哪些技术来调试我的Clojure代码?
- 3. ASP.NET为您的客户提供API有哪些好的技术?
- 4. 可以应用哪些通用技术来优化SQL查询?
- 5. 有没有一些常用的技术来分析基于协程的代码?
- 6. 您可以配置VS2008代码分析以使用英式英语词典吗?
- 7. 您将使用哪种技术来进行物理仿真SVG或Canvas?
- 8. 您使用哪些工具分析文本?
- 9. 您是否可以阻止用户查看您的Alexa技能?
- 10. 用户生成数据的定性分析有哪些信息分析技术?
- 11. 您可以使用哪些webdriver的操作链呢?
- 12. 您可以使用哪些组件创建AIR应用程序?
- 13. 您可以编写Java代码来检查您的本地Internet Explorer的版本
- 14. 要使用哪些Java EE技术?
- 15. 10。我应该使用哪些技术?
- 16. 有哪些方法可以利用SecurID和类似的技术?
- 17. 您可以在Jquery.live选择器中使用哪些过滤器?
- 18. 使用哪些技术来编写在语言之间切换的解析器?
- 19. ADO.NET包含哪些技术?
- 20. 您可以在运行时更改哪些JavaScript代码?维基百科
- 21. 哪里可以查看哪些xilinx fpga技术支持哪些dcm/pll?
- 22. 您使用哪些Javascript编程模式?
- 23. 您使用Sun CoolThreads技术的经验是什么?
- 24. 您可以使用Google Analytics代码的包含文件吗?
- 25. 目前正在使用哪些技术来加速下一代JavaScript引擎?
- 26. 哪种分析技术最适合分析程序行为
- 27. 您可以使用Asterisk ARI
- 28. 创建API可为您的服务带来哪些好处?
- 29. 这款基于浏览器的乒乓游戏可以使用哪些技术?
- 30. 您应该何时坚持使用新技术进行培训?
我喜欢这样。可以将其定义为x;正常运行。 – EvilTeach 2008-11-13 00:50:14
是的,我这样做,但我忘了把它添加到我的答案。感谢您的提醒。 – 2008-11-13 14:38:50