【发布时间】:2012-08-01 18:29:33
【问题描述】:
我已经从 SO 阅读了几个关于此问题的不同问题,但仍然无法使其正常工作。我正在使用public static string[] files = Directory.GetFiles(CurrentDirectory, "*.wav", SearchOption.AllDirectories); 获取文件路径数组,然后将其传递给文件流。文件流所做的操作花费的时间太长,只有一个线程处理所有文件。所以我决定拆分数组并将这些较小的数组传递给不同的线程。
我使用的代码是从另一个 SO 问题中获得的,并使用它来传递拆分数组,但它仅适用于第一个数组中的一个文件,但我知道问题出在哪里:
var thing = from index in Enumerable.Range(0, files.Length)
group files[index] by index/600;
foreach(var set in thing)
string.Join(";", set.ToArray());
(这不完全是我使用它的方式,我已经把它弄乱了,我不记得了。)这个问题是所有东西都被视为一个巨大的文件路径,我有一个 foreach 循环从较小的数组中获取每个文件,但它将其中的每个文件都视为一个文件,当搜索返回多个文件时抛出 filepathtoolong 异常。我的函数接受一个数组,然后使用foreach (string file in smallerArray) 写入每个数组。我需要做的是将文件数组分解为 4 个较小的数组并启动新线程,例如 new Thread(() => { DoWork(newArray); }).Start();,但我尝试过的都没有奏效。
【问题讨论】:
-
您是否考虑过使用 Parallel LINQ 而不是自己编写?
-
@TimB:正是我发布的答案:)
-
使用 Directory.EnumerateFiles() 作为源可能更好。
-
@Henk,谢谢,这有助于加快初始搜索速度。