我有一個遞歸通過目錄,並建立一個樹的方法:獲取目錄與並行的ForEach
public void RecurseFolders(TreeNode mainNode) {
DirectoryInfo nodeDir = new DirectoryInfo(mainNode.Tag.ToString());
try {
foreach (var dir in nodeDir.GetDirectories()) {
int index = GetSystemIcon(dir.FullName, treeView1.ImageList, false);
var subNode = new TreeNode(dir.Name, index, index);
subNode.Tag = dir.FullName;
mainNode.Nodes.Add(subNode);
RecurseFolders(subNode);
}
} catch (UnauthorizedAccessException err) {
Console.WriteLine(err);
}
}
我想如何處理此做的是找到一種方法來寫一個Parallel.ForEach出來的它,但我的LINQ知識太處女了。
顯然,我不能將TreeNode
傳入線程,所以我修改了簽名以使其更通用。這是我得到的:
public string[] RecurseFolders(string dirString) {
List<string> list = new List<string>();
DirectoryInfo nodeDir = new DirectoryInfo(dirString);
Parallel.ForEach(nodeDir.GetDirectories(), dir => {
// how do I write this?
});
return list.ToArray();
}
我該如何完成它?
編輯:
這是拉動目錄和文件的列表,從我們的網絡存儲驅動器。通過網絡獲取信息目前是我們的瓶頸,但它是我學習一些並行處理技術的好地方。
只需要注意,根據文件系統的不同,它可能不會加速,甚至可能會減慢應用程序的運行速度。 –
如果您正在使用遞歸,那麼在分析大型驅動器時,您可能會遇到堆棧溢出異常 – techno
@techno:您覺得您需要緩衝多大才能溢出堆棧? – Gabe