Max*_*hon 3 c++ ubuntu performance memory-management clion
我目前正在对 C++ 程序进行性能测试。我需要批量插入一个std::unordered_map或其他类似的开源结构。我将 30-40 个字符字符串作为键值对插入,并注意到一个有趣的行为。第一次执行代码(Clion)时,花了 20 秒完成,我重复了测试(什么都不做),是 14 秒,然后又是 8 秒、4 秒,代码现在运行大约 3 秒。我应该重复一遍,我的代码中唯一昂贵的操作是批量 unordered_map insert,多线程与std::lock_guard<std::mutex>.
另一个重要的信息是我正在从文件中读取这些键和值。所以我想到了在Ubuntu 中发生的一些文件缓存。但是我用不同的机制做同样的事情,从来没有经历过这样的事情。然后我想到了一些 RAM 分配技巧,可以在程序结束后保持大部分地图完好无损。但我没有做任何事情来实现它。
为什么会这样?不仅如此,我该如何重置?我需要进行客观测试,因为我的代码将在多个服务器中运行,而无需任何预缓存。
谢谢。
tad*_*man 14
第一次运行代码时,它必须:
第二次运行代码时,它可以:
这就是为什么多次和长时间运行测试很重要,不仅仅是几秒钟,而是至少连续 10-15 分钟。
您的执行时间一开始会有很大差异,但稍后会收敛到更一致的值。您始终可以按运行时间排序并找到第 95 个百分位数,即程序在 95% 的时间内运行的时间。