【发布时间】:2021-05-19 16:55:45
【问题描述】:
我正在尝试测量执行时间。 我在 Windows 10 上并使用 gcc 编译器。
start_t = chrono::system_clock::now();
tree->insert();
end_t = chrono::system_clock::now();
rslt_period = chrono::duration_cast<chrono::nanoseconds>(end_t - start_t);
这是我测量时间的代码 bp_w->insert()
函数 insert 在内部像 follow 一样工作(只是伪代码)
insert(){
_load_node(node);
// do something //
_save_node(node, addr);
}
_save_node(n){
ofstream file(name);
file.write(n);
file.close();
}
_load_node(n, addr){
ifstream file(name);
file.read_from(n, addr);
file.close();
}
实际结果是,
read 是_load_node 执行次数。
write 是_save_node 执行次数。
时间是纳秒。
read write time
1 1 1000000
1 1 0
2 1 0
1 1 0
1 1 0
1 1 0
2 1 0
1 1 1004000
1 1 1005000
1 1 0
1 1 0
1 1 15621000
我不知道为什么会出现这个结果并想知道。
【问题讨论】:
-
在进行这样的测量时使用
steady_clock。 -
感谢您提供的好信息。我会尝试的,但对结果感到好奇。你能给个主意吗?我想知道为什么会这样。
-
时间可能不确定。在 Windows 上,您可以获得的最小滴答声可能是 1/64 秒,这会导致垃圾结果,例如数百个 0,然后是一个 15 毫秒的跳跃。
chrono有能力提供纳秒,但通常它下面的系统无法为您提供接近此的分辨率。 -
我只能猜测。时钟似乎不支持比微秒更高的分辨率。一些插入需要很短的时间。这取决于您的代码中发生了什么。您上面的伪代码很可能无法编译。如果您将minimal reproducible example 放在一起,可能会更容易说出来。
-
如果你在 Windows 上,你可以使用GetSystemTimePreciseAsFileTime 或QueryPerformanceCounter。
标签: c++ chrono time-measurement