我有一个递归通过目录,并建立一个树的方法:获取目录与并行的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