0

我有一个以一定速率读写的 SCALA(+ JAVA) 代码。分析告诉我代码中的每个方法执行了多少时间。我如何衡量我的程序是否达到了最大效率?优化我的代码,使其以给定配置可能的最大速度读取。我知道这是硬件特定的,并且因机器而异。如果有短路的方法来衡量这个过程。如果我的程序正在以硬件可能的最快速度读写。(我将 FileWriter 与 BufferWriter 一起使用。)

4

1 回答 1

1

给出描述后,您的最佳选择可能正在试验中。您可以测量的内容:

  • 更改缓冲区大小(当我尝试这个时这对我没有帮助)
  • 切换到 NIO(可能对大文件有帮助)
  • 缓存您读取的数据(可能对小文件有帮助),如果其中有很多文件,则缓存目录内容。当文件夹中的文件数量增加时,打开文件的速度会降低。

确保代码分析中的代码没有问题的一种可能技术是获取方法的 CPU 时间分布树,并扩展大部分时间的执行路径。如果所有这些路径都指向 Java 标准库,那么您可能已经达到了最佳性能。

更新

您提供的 hrof 的其他一些东西和技术。

  • 使用分析器或其他一些技术(我更喜欢秒表,因为它们可以提供更稳定和真实的结果),您需要找到您的瓶颈。
  • 大多数 IO 都可以优化为使用单个缓冲区——这对于 Guava 或 Apache Commons IO 来说不那么痛苦。
  • 但是,如果您在序列化链中使用 Jackson(如果这是您的瓶颈),那么您无能为力。改变算法?
  • 有一些慢人(与本机文件系统 IO 相比) - 即Formatters,String.format非常慢,Jackson 等。
  • IO 有典型的缓慢操作 - 即缓冲区分配、字符串连接、分配的缓冲区过多char[]是 IO 优化的一种气味。
于 2013-11-09T19:35:54.413 回答