Scala:测量任何其他函数的运行时间的函数
Posted
技术标签:
【中文标题】Scala:测量任何其他函数的运行时间的函数【英文标题】:Scala : function to measure the runtime of any other function 【发布时间】:2020-03-05 13:52:34 【问题描述】:我想编写一个函数,它打印任何其他函数的运行时,该函数将作为参数和参数一起作为参数。在 python 中举例我的想法以便更好地理解:
def runtimer(func , *args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
print(time.time() - start)
return result
runtimer(time.sleep, 1)
Output: 1.000108242034912
我正在尝试使用val: _*
参数,但它实现了“全有或全无”。以另一种方式,我检查了源 scala github 中的 print
函数,但我没有找到任何适用于我的问题的内容。
我想知道这是否可以在 scala 上解决或获得任何建议。一个 java 实现也会很有用。
谢谢!
UPD:我将在这里留下一些最有用的参考资料:第一个用于最相似的实现,第二个最大正确用于在 JVM 上进行运行时计算(通过评论): 1)How to profile methods in Scala? 2)Scala : function to measure the runtime of any other function
问题还没有解决,等待讨论
【问题讨论】:
@MarioGalic 我相信副本的公认答案是完全错误的,这不是在 JVM 上进行基准测试的正确方法。我相信最好链接到this answer 我会澄清一下,精度并不重要,也就是说,这个围栏对于计算工作时间超过一分钟的算法的运行时间是必要的,而精度在 +-10% 时可能很重要.现在我使用这段代码: time = System.currentTimeMillis() func() println("Runtime: " + System.currentTimeMillis() - time) 如果你想要一个 Java 分析函数,你应该把它分解成一个单独的问题。它完全独立于 Scala 分析功能。 @LuisMiguelMejíaSuárez 我已经根据 Travis 更新了 How to profile methods in Scala?,希望是正确的 answer。 【参考方案1】:要解决您的问题,您必须使用 HOF(高阶函数)。 这些是将其他函数作为参数的函数。 这是一个示例,说明如何为具有一个参数的函数完成此操作。
def measure(yourFunction: (Int) => Int, arg1: Integer): Double =
val startTime = System.nanoTime()
yourFunction(arg1)
System.nanoTime() - startTime
如您所见,此函数测量以 Int 作为参数并返回 Int 的函数的时间。 我已将您的 Python 代码翻译成 Scala
新泽西
【讨论】:
是的,它的工作,但我想写一个通用函数,不仅为 1 或只有 2 个参数。有人为我标记了这个答案并提供了很好的参考(通过名字来称呼):***.com/questions/9160001/…以上是关于Scala:测量任何其他函数的运行时间的函数的主要内容,如果未能解决你的问题,请参考以下文章
opencv基础测量运行时间的函数getTickCount/getCPUTickCount/getTickFrequency