2013-04-23 152 views
0

我正在寫一個小應用程序,從一大堆樣本中拉下每個特定類型的幾個有效樣本。C#通過網絡獲取目錄中的隨機文件夾

的結構是這樣的:通過美國

根 - >國有>型 - >樣品

我的程序遊船,和抓鬥每一個獨特的類型和路徑,該類型。一旦獲得所有這些,就會遍歷每種類型,並選擇X個隨機樣本,其中X由用戶提供。

該程序在本地運行良好,但在網絡上它明顯慢得多。我採取了一些措施來幫助解決這個問題,但是我最後的部分是從TYPE目錄中快速獲取隨機樣本。

本地,我用

List<String> directories = Directory.GetDirectories(kvp.Value).ToList(); 

運行這個在網絡上時,這是瓶頸。我有一種感覺這可能是不可能的,但是有沒有辦法從TYPE目錄中抓取5個隨機樣本,而無需首先識別所有樣本?

希望我已經清楚了,謝謝。

回答

0

也許嘗試使用DirectoryInfo,當對特定目錄進行大量調用時,由於在每次訪問時未檢查到安全性,因此速度更快。

0

您可能會發現使用DirectoryInfo對象作爲所需的根目錄和子目錄以及以這種方式列出目錄會提高速度。這會讓你稍稍提高速度,因爲.NET的懶惰初始化策略意味着它會使用你在示例中使用的靜態目錄方法進行更多的網絡往返。

我想下一個問題是爲什麼速度很重要?您是否考慮過在自己設計的緩存中維護一個最新索引以便快速訪問?使用FileSystemWatcher,定期輪詢還是兩者兼而有之?

我想你可能也有興趣在這個環節:Checking if folder has files

...它包含了從一個呼叫檢索有關整個目錄結構信息,限制你的網絡調用到最低限度的一些信息。這無疑會增加你的內存需求。

是否可以預測每種文件的名稱?你會有更好的運氣,隨機預測一些樣本名稱並直接閱讀它們嗎?