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++?