【问题标题】:Very slow read from DVD in Java and .Net在 Java 和 .Net 中从 DVD 读取速度非常慢
【发布时间】:2010-11-25 14:44:38
【问题描述】:

我注意到在两个应用程序中生成文件的哈希值,一个用 Java 编写,另一个用 C# 编写,从 DVD 读取时性能很糟糕。我正在使用 Windows XP SP3。我从噪音中注意到,驱动器在读取一堆块后继续旋转,导致读取之间暂停几秒钟。

奇怪的是,当我使用资源管理器将文件复制到硬盘驱动器或使用 md5sum(用 C 编写的实用程序)时,这不会发生。还。在使用相同硬件的 Linux 中运行时,Java 应用程序运行良好。

private static final byte[] m_buf = new byte[1048576*3];
...
//Using a BufferedInputStream makes no difference
InputStream in = new FileInputStream(file);
while((last_read = in.read(m_buf)) != -1){
    update_hash(m_buf, 0, last_read);           
}
in.close();

有什么提示吗?

谢谢。

【问题讨论】:

  • 你能发布一些你是如何阅读的代码吗?
  • 去掉哈希函数,只计算复制位。
  • 我想您已经尝试增加/减少缓冲区大小?

标签: c# java windows performance dvd


【解决方案1】:

将缓冲区大小减少到 1024 字节后,问题就消失了。 不知道确切的解释,但可能是因为 DVD 驱动程序没有使驱动器减速的频繁读取。

感谢cmets

【讨论】:

    【解决方案2】:

    我猜测 Java 代码将 DVD 视为文件系统上的常规文件,而 Windows 可能会优化读/写。

    由于 Java IO 调用转到本机/OS 调用,我猜测 linux 操作系统在进行 IO 调用以读取 DVD 时更智能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-27
      • 2012-07-15
      • 2016-05-21
      • 2019-02-05
      • 2019-03-26
      • 2016-06-26
      相关资源
      最近更新 更多