【发布时间】:2014-11-20 13:21:51
【问题描述】:
在尝试测量执行时间时,我知道将值写入文件比将值打印到控制台要快得多(这确实会减慢程序速度)。但是我无法找到任何东西来比较将值直接写入文件的速度与在程序执行期间将值保存在可增长的数据结构(如 LinkedList)中,然后在程序退出时将所有值写入文件。似乎将值保存在 LinkedList 之类的“可能”会更快,但我不确定。
我正在尝试对在其自己的线程中运行的音频混音器循环进行计时,因此它将是自计时的。因此,我想使用一种技术来测量和存储对整体运行时间影响尽可能小的时间。
另外,我也研究过 VisualVM 之类的 Java 分析器,但还没有找到一种方法来查看循环中各个通道的执行时间。
谢谢!
【问题讨论】:
-
谁来阅读它?为什么要让自己获得 10^6 个单独的函数时间间隔,将它们保存在某个地方,然后将它们平均到 1 个数字?为什么不直接运行 10^6 次并将总数除以 10^6?你说还有其他事情吗?现在我们正在取得进展。您想知道该例程在堆栈上的时间分数。
-
嗨,迈克·邓拉维,感谢您的回复。这只是给我的,所以我将成为阅读它的人。我不会将它们平均为一个数字。我确实想查看每个循环的执行时间。在较慢的系统上偶尔会出现“偶尔”的音频故障,我想看看我的混音器此时是否真的变慢了。一个数字不会告诉我。
-
任何 I/O 都会打乱你的时间。 OTOH,有人问为什么他们的图形更新程序运行得很快但偶尔会暂停。这是一件很难抓住的事情。不容易但有效的方法是使用看门狗定时器,只要它最近没有被重置足够多,就会中断。当这种情况发生时,他们可以看看为什么会发生。
-
看门狗定时器是一个有趣的想法,但是您如何正确地计时以捕捉故障?它本质上只是反复试验吗?此外,与其执行 I/O 操作,不如将值存储在 LinkedList 之类的东西中呢?这会是一种可用于计时的廉价操作吗?再次感谢!
-
嗯,当然,链表或数组必须比 I/O 快。要获得时间,您需要回到反复试验或简单平均。
标签: java performance file data-structures execution-time