在我开发的一些平台上,没有分析工具。我正在寻找您个人使用的建议/技术,以帮助您在不使用分析器的情况下识别热点。
目标语言是C++。
我对你个人用过的东西很感兴趣。
发布于 2008-11-13 00:31:31
我发现以下内容非常有用:
#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());发布于 2008-11-13 00:40:25
不是开玩笑的:除了将计时转储到std::cout和其他面向文本/数据的方法之外,我还使用了Beep()函数。听到两个“嘟嘟声”检查站之间的沉默,会给人一种不同的印象。
这就像看一张写好的乐谱和真正听到音乐之间的区别。这就像读取rgb(255,0,0)和看到火车头红色之间的区别。
因此,现在,我有一个客户端/服务器应用程序,通过不同频率的蜂鸣声,标记客户端发送消息的位置,服务器开始回复的位置,完成回复的位置,回复最先进入客户端的位置,等等,我可以很自然地感觉到时间都花在了哪里。
发布于 2008-11-12 23:04:46
从本质上讲,如果分析工具不可用,您将模拟分析器所做的工作。您将计数器插入到您认为有趣的函数中,并计算它们被调用的次数,以及它们可能被调用的大小/类型的参数。
如果您可以访问平台上的任何计时器,您可以在上述函数的开始/结束处启动/停止这些计时器,以获取执行时间信息,如果代码中不清楚这一点的话。这将在复杂的代码中给你带来最大的回报,因为通常会有太多的函数来检测所有的函数。相反,您可以通过为每个代码段指定一个计时器来获取在某些代码段中花费的时间。
这两种技术串联在一起可以形成一种迭代方法,在这种方法中,您可以找到使用计时器消耗大部分周期的大部分代码,然后以更细的粒度检测各个函数,以解决问题。
https://stackoverflow.com/questions/285710
复制相似问题