如何分配连续的磁盘空间?

时间:2011-03-02 22:26:06

标签: java c++ hard-drive

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

非常感谢!

PS-Edit:我知道它实际上没什么区别。但我真的需要了解这一点。但感谢所有人提出建议。

4 个答案:

答案 0 :(得分:8)

您是否发现了性能问题?如果没有,那就不要做任何事。

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

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

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

答案 1 :(得分:1)

AFAIK没有内置方式,也没有100%纯java解决方案。问题是检索那种信息取决于平台,因为Java应该是独立于平台的,所以你只能使用一个共同的子集。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

NTFS已经尝试连续分配文件,如Windows 7工程师的this blog post中所述。如果没有足够大的连续可用空间块,您的文件将被分段。

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

最后,fragmentation is irrelevant on SSD disks