ColdFusion执行时间精度

我发现2004年的一个非常老的线程报告了ColdFusion调试输出中列出的执行时间只能精确到16ms的事实。 这意味着,当您打开调试输出并查看执行时间时,您会看到最接近16ms倍数的估计值。 我今天可以用ACF10看到这个。 刷新页面时,大多数时间在15-16ms的倍数之间反弹。

以下是问题:

  • 从底部开始,当ColdFusion报告0ms或16ms时,它是否始终表示介于0到16之间,但不超过16ms?

  • 当Coldfusion报告32毫秒时,这是否意味着介于17和32之间?

  • ColdFusion默认单独列出所有内容,而不是作为调用者包含许多函数的执行树。 当确定树上较高的执行成本时,它是将孩子的“不准确”时间相加,还是这是所有子进程执行实际时间的实际成本?

  • 我们可以使用cftimers或getTickCount()来真正获得准确的时间,还是这些也是估计的?

  • 有时,你会看到3个函数每个都花费4ms,总共花费12ms,甚至一个花费7ms的花费。 为什么它有时看起来“准确?”

  • 我现在会提供一些猜测,但我想要一些社区支持!

  • ColdFusion将跟踪报告精确到16毫秒的过程花费的总时间,而不是总结子进程。

  • cftimers和getTickCount()更准确。

  • 我不知道?


  • 在Java中,您可以拥有System.currentTimeMillis()或System.nanoTime()。

    我假设getTickCount()仅仅返回System.currentTimeMillis()。 它也被ColdFusion用来报告调试输出执行时间。 你可以在大量的StackOverflow问题上找到抱怨System.currentTimeMillis()不准确的问题,因为它是从操作系统报告的。 在Windows上,准确度可能会有所不同,高达50ms。 它不考虑飞跃滴答或任何事情。 但是,它速度很快。 查询似乎报告来自JDBC驱动程序,SQL引擎或其他方法的东西,因为它们通常是准确的。

    作为一种替代方案,如果您真的想提高准确性,您可以使用这个:

    currentTime = CreateObject("java", "java.lang.System").nanoTime()

    这比currentTimeMillis()的性能要差,但精确到几纳秒。 你可以除以1000以达到微秒。 如果你想通过除以1000000来转换为毫秒,你会想要包装在precisionEvaluate()中。

    请注意,nanoTime()对于纳秒不准确,精确到纳秒。 它的准确性仅仅是对currentTimeMillis()的改进。


    这是更多的评论,然后回答,但我还不能评论。

    根据我的经验,查询的最短执行时间为0毫秒或16毫秒。 它从来没有8ms或9ms。 为了好玩,你可以试试这个:

    <cfset s = gettickcount()>
    <cfset sleep(5)>
    <cfset e = gettickcount() -s>
    <Cfoutput>#e#</cfoutput>
    

    我尝试了不同的值,看起来预期的输出和实际输出在0ms到16ms的范围内总是不同的,不管使用什么值。 似乎coldfusion(java)是准确的,约16毫秒的余量。

    链接地址: http://www.djcxy.com/p/18905.html

    上一篇: ColdFusion Execution Time Accuracy

    下一篇: What to use as replacement for concepts (upcoming feature) in C++?