2011-10-24 80 views
2

我正在寫一個程序,搜索和複製MP3文件到指定的目錄。最有效的方法來搜索文件

目前我正在使用一個目錄中充滿了所有mp3的列表(這並不奇怪 - 很長一段時間)。然後我使用taglib-sharp比較ID3Tags與輸入的藝術家和標題。如果它們匹配,我複製該文件。

由於這是我的第一個程序,我對編程非常陌生,所以我認爲必須有一個更好/更有效的方法來實現這一點。有人對我可以嘗試什麼有什麼建議嗎?

編輯:我忘了添加一個重要的細節:我希望能夠指定每次開始搜索時要搜索的目錄(待搜索的目錄將在程序本身中指定)。因此,將所有文件存儲在數據庫中或類似的東西並不是真正的選擇(除非每次都有辦法做到這一點仍然有效)。我基本上都在尋找最好的方法來搜索文件每次索引的目錄中的所有文件。 (我知道這可能不是一個好主意,但我想這樣做,如果沒有真正的方法來做到這一點,我不得不重新考慮,但現在我想這樣做)

+0

顯示一些你想要優化的代碼。否則沒有人知道什麼可以優化。 – Peter

+0

@peer:從磁盤讀取時沒有太多的優化要完成。或者你有什麼想法? – jgauffin

回答

1

使用數據庫(簡單的二進制序列化文件或像RavenDb這樣的嵌入式數據庫)來緩存所有文件。而是查詢該緩存。

還存儲數據庫中每個文件夾的修改時間。每次啓動應用程序時將數據庫中的時間與文件夾中的時間進行比較(並同步更改的文件夾)。

這應該給你更好的表現。線程化並不會真正幫助搜索文件夾,因爲它是需要時間的磁盤IO,而不是您的應用程序。

+0

當我問我的問題時,我已經忘記了包括一個明確的細節,我已經編輯了原始問題。基本上我希望能夠在每次搜索開始時對所有文件進行索引。因此,數據庫並不是一個真正的選擇(除非每次都將新文件存儲在新文件中時它仍然有效),對於之前未提及的內容感到抱歉。 – boert03

2

您大多揹負着IO的瓶頸,這是您工作硬件的後果。這將是複製這裏是分母的文件(除了找到與複製相比矮小的文件外)。

其他方式去文件管理,並針對不同的用途露出更好的界面,如NTFS Change Journals和低水平部門處理(不推薦)的例子,但如果這是你的第一個程序在C#那麼也許你不想冒險進入p /調用本地電話。

除了實際進程的替代方案之外,您可能會考慮使磁盤訪問最小化的機制 - 即不重做您已完成或不需要執行的任何操作。

+0

當我嘗試使用存儲所有文件的列表時,最小化磁盤訪問是我的想法。通過這種方式,我可以在完成填充後查看列表。不過,我認爲這不是一個好主意,因爲其中有成千上萬個條目的列表可能會很慢。 – boert03

相關問題