我有应用程序(单线程),每次操作系统成功启动时都会被Windows事件触发。
一次大约十几次启动我观察到我的应用程序崩溃,无法按时发送数据到服务。经过调查,我发现代码扇区导致问题(花费太多时间)。
我无法手动重现这一点,所以我在臭臭的行中对我的代码进行了一些残酷的记录。
我发现第58行和第59行之间的延迟接近1.5秒!
...
LIF_DBG << "LINE 58";
Buffer request(static_cast<uint32_t>(cmdSize)); // around 50-100 bytes
LIF_DBG << "LINE 59";
...
缓冲区构造函数:
Buffer(uint32_t size_) : buf(nullptr), size(size_)
{
buf = new uint8_t[size];
if (buf != NULL && size > 0)
{
memset(buf, 0, size);
}
}
注意:延迟不仅发生在这一行,我观察到间接调用 new , malloc(), memset()<的其他行的奇怪延迟/ em>等。
我不明白是什么原因造成了这种奇怪的行为,我打赌有两种选择:
系统调用延迟
记录器有时会导致延迟(不太可能,因为最初的记录是在臭臭的代码部门之外)
我还能做些什么来找到根本原因?