【问题标题】:Program Execution Time | Saving Values to a File or a Data Structure?程序执行时间 |将值保存到文件或数据结构?
【发布时间】: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


【解决方案1】:

写入文件会中断您的程序 - 不是每次写入时都会中断,但经常会打乱您的计算。写入磁盘由内核完成,您的整个程序将等待 IO。将数据保存到内存更好。但是,请注意 ArrayList,随着数组的增长,它可能会做很多额外的工作。使用链表是对的。

如果数据量变大,您可以使用内存数据库。

【讨论】:

  • 是的,将其存储在 RAM 中,直到测试完成,然后在需要时将其写入 perma
  • 您好,贾德·罗杰斯,感谢您的回复。这基本上是我的想法,但我想确定是这样。是的,我知道您所说的使用 ArrayLists 的额外成本是什么意思。内存数据库听起来也是一个好主意,有没有你推荐给我的?再次感谢。
  • -1 很抱歉投了反对票,但即使LinkedLists 的作者也表示这是一个错误。虽然在某些情况下它优于非预置大小的ArrayList,但它们太难找到了。预先调整大小的ArrayList 总是更好。另请参阅 thisthis 问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
  • 1970-01-01
  • 2017-10-25
  • 2016-06-12
  • 1970-01-01
相关资源
最近更新 更多