【问题标题】:How do I allocate contiguous disk space?如何分配连续的磁盘空间?
【发布时间】:2023-03-22 20:46:01
【问题描述】:

我正在开发一个可以处理大量文件的系统,并进行了一些谷歌搜索,我读到了有关提高硬盘信息检索速度的信息。但由于我使用 Java,我找不到任何库来解决这个问题。我对C++的了解很模糊,用IOCTL发现了一些关于硬盘信息检索的东西。 显然,无法获取特定信息,例如我可以从硬盘中获得多少连续空闲块或它拥有的最大连续空闲块。 我目前正在使用 Windows 7 和 XP。 我知道 JNI 的使用,但我对 C++ 有很大的问题。但即使搜索 C++ 解决方案,我也找不到任何东西。也许我在谷歌上做了一些错误的查询。 有人可以给我一个链接,学习建议或任何东西吗?我愿意学习C++(虽然我几乎没有空闲时间)。

非常感谢!

PS-Edit:我知道这实际上没有任何区别。但我真的需要了解这一点。不过感谢大家的建议。

【问题讨论】:

  • 这远低于您应该关注的水平。
  • 您需要在 Windows 中从 Java 调用 FSCTL_MOVE_FILE,但我不知道该怎么做,即使这很容易,您仍然无法为其他平台做任何事情。
  • 这在很大程度上取决于文件系统,所以如果你真的需要这个功能,你最好只选择一个你要支持的 FS,ext4 听起来像好的候选人,但我知道的不多,所以不要听我的。 :)
  • 如果他们认为这会优化性能,他们不是已经这样做了吗? Windows 的人实际上比你想象的要聪明。 (......虽然他们似乎无法理解索引服务是一个半可怕的 [和半可怕的 :)] 的想法。)
  • @munto:关于括号内的声明:AGREEEEEEEEEEEEEEEEE

标签: java c++ hard-drive


【解决方案1】:

您是否发现了性能问题?如果没有,那就什么都不做。

您确定磁盘上文件的物理分布是导致此性能问题的原因吗?如果不是,那么测量在您的应用程序中花费的时间,并尝试改进算法,必要时引入缓存。

如果您已经完成了所有这些工作,并且确定是磁盘上文件的物理分布导致了性能问题,那么您是否考虑过购买更快的磁盘,或者考虑使用多个磁盘?硬件通常比开发时间便宜得多。

我非常怀疑磁盘上文件的物理分布是否会对您的应用程序的性能产生重大影响。我会先在别处搜索。

【讨论】:

  • 因为软件是数据管理的,所以有磁盘管理的需求,所以没办法解决。感谢您的回复。
  • 优化的第一条规则,就是不要这样做。 c2.com/cgi/wiki?RulesOfOptimization
【解决方案2】:

AFAIK 没有内置方式,也没有 100% 纯 Java 解决方案。问题是检索这类信息取决于平台,并且由于 Java 应该是独立于平台的,因此您只能使用公共子集。

【讨论】:

  • 我目前正在寻找特定的操作系统解决方案,即 Windows 7 或 Windows XP。这就是我发现 IOCTL 的原因。
【解决方案3】:

Captain Kernel 解释说here,这不一定会提高磁盘性能,除此之外,如果没有大量工作是不可能的。

【讨论】:

    【解决方案4】:

    NTFS 已经尝试连续分配您的文件,如 Windows 7 工程师的this blog post 所述。只有在没有足够大的连续可用空间块时,您的文件才会碎片化。

    如果您认为文件不被碎片化很重要,那么我认为最好的选择是安排每晚对磁盘进行碎片整理。这更像是一个系统管理问题。

    最后,fragmentation is irrelevant on SSD disks

    【讨论】:

      猜你喜欢
      • 2011-08-01
      • 1970-01-01
      • 2013-02-04
      • 1970-01-01
      • 2018-09-11
      • 2019-04-12
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      相关资源
      最近更新 更多