我需要分析某些功能(执行时间超过1毫秒)花费的时间,但是要在生产环境中运行,而不是在开发中找到我所找到的解决方案。
我当然可以:
time_before = get_time_ns();
my_function();
time_after = get_time_ns();
difference = time_after - time_before;
但是在很多功能上这样做很无聊。我想到了一个在函数之前和之后插入的宏,然后我可以简单地做
profile!(my_function(arg1, arg2, ...));
但是我应该如何存储返回的值?我认为,如果呼叫的类型为:
profile!(object.my_function(arg1, arg2, ...))
是否可以创建我想要的宏?实际上,我认为我甚至不需要专门匹配函数,也许不匹配宏中的文字文本,然后简单地将该文本作为时间测量之间的一条线执行即可。
还有一个问题,我什么时候需要测量
let r = object.my_function(arg1, arg2, ...)
但我认为可以将其翻译为
let r = {
time_before = get_time_ns();
let r = my_function();
time_after = get_time_ns();
difference = time_after - time_before;
r
}
但是仍然存在返回时差的问题。返回一对函数结果+时差是可以的,但不是最好的。也许宏可以有2个参数:
profile!(variable_name, object.my_function(arg1, arg2, ...))
翻译为
let variable_name: std::time::Duration;
let r = {
time_before = get_time_ns();
let r = my_function();
time_after = get_time_ns();
variable_name = time_after - time_before;
r
}
有人有更好的主意吗?可以用宏来实现吗?