2011-03-02 68 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