如何有效地分析相互递归函数

本文关键字:递归函数 有效地 | 更新日期: 2023-09-27 18:04:33

我正试图分析一组相互递归的函数。我更希望看到每个函数相对于其他函数花了多少时间。然而,由于这些函数是相互递归的,常规分析显示所有函数占用100%的时间。

我希望我的分析做的是显示每个函数的包含时间,而不包括它在递归调用上花费的时间。例如A同时调用B和C;B再次打电话给A;C不调用任何东西。对于A,我希望看到A位于调用堆栈顶部或A;C(其中C位于顶部)而不是A;B的时间百分比。我想,在查看调用堆栈时,分析不应该超越任何相互递归的函数,所以调用堆栈XAZ(从下到上)变成AZ, XAZB变成b。

我想一个解决方案是将每个函数写成尾递归形式,然后将除尾调用外的所有内容放入单独的非递归函数中。然而,这将是一个很大的重写,也会影响程序的性能特征,所以它远非理想的。

理想情况下,会有一个配置选项的分析器来帮助我。我正在用c#工作。有吗?否则你认为有可能破解配置文件会话文件来得到我想要的吗?

提前感谢!

如何有效地分析相互递归函数

您想知道A在调用堆栈中只出现一次的时间百分比吗?获取一些调用堆栈样本并从中选择。这有点不寻常。大多数人想知道A占用了多少时间(以及A中的代码行数)。例如,如果A是免费的,可以节省多少时间?答案是,它只是含有A的样本的比例,无论是在一个水平还是多个水平。

我得到堆栈样本手动,因为我正在寻找加速,计时的精度不是那么重要。如果您友好地要求,也许分析器会允许您访问原始示例。