2011-03-02 89 views
4

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

非常感谢!编辑:我知道这实际上没有什么区别。但我真的需要了解这一点。但是要感谢大家给出的建议。

+4

这低于您应该关注的级别。 – delnan 2011-03-02 22:30:36

+2

你需要从Java中的Windows调用[FSCTL_MOVE_FILE(http://msdn.microsoft.com/en-us/library/aa364577.aspx),但我不知道该怎么做,即使它很容易,你仍然无法为其他平台做任何事情。 – Mehrdad 2011-03-02 22:36:59

+0

这很大程度上取决于文件系统,所以如果你真的需要这个功能,你最好选择一个你将要支持的FS,ext4听起来像是一个很好的候选人,但是我不' t知道太多,所以不要听我说。:) – biziclop 2011-03-02 22:40:55

回答

1

AFAIK没有内置的方法,也没有100%纯Java解决方案。问题在于检索这种信息取决于平台,因为Java应该与平台无关,所以只能使用一个公共子集。

+0

我目前正在寻找特定操作系统解决方案,即Windows 7或Windows XP。这就是我找到IOCTL的原因。 – mrcaramori 2011-03-02 22:42:13

8

您是否发现性能问题?如果不是,那么不要做任何事情。

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

如果你所做的这一切,并确保它是造成性能问题磁盘上的文件的物理分布,你有没有想过买一个更快的磁盘,或者约几个使用的呢?硬件通常比开发时间便宜得多。

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

+0

由于软件是关于数据管理的,所以需要磁盘管理,所以我不能用另一种方式解决它。谢谢您的回复。 – mrcaramori 2011-03-02 22:40:38

+0

优化的第一条规则,就是不要这样做。 http://c2.com/cgi/wiki?RulesOfOptimization – cmcginty 2011-03-02 23:12:29

1

Captain Kernel解释了here这不一定会提高磁盘性能,而且除此之外,如果不进行大量工作,这是不可能的。

1

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

如果你认为这是你的文件不被分段重要,那么我认为最好的办法是安排您的磁盘的碎片整理每晚。这更像是一个系统管理问题。最后,fragmentation is irrelevant on SSD disks