如何匹配宏中的函数调用?

时间:2020-10-10 00:55:54

标签: rust

我需要分析某些功能(执行时间超过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
}

有人有更好的主意吗?可以用宏来实现吗?

0 个答案:

没有答案