给你实测一下, 本机128G ssd + 1T 机械,cpu i7.
搜索"123.jpg" 用你的程序跑了2分钟 只出来了14条结果, everything搜索结果是148条.
按照你的那种方法我也写了一下

贴个代码吧:
class Program
{
static void Main(string[] args)
{
SearchTest.SearchFiles("123.jpg");
}
}
public class SearchTest
{
static string searchWd;
static object locker = new object();
public static string SearchWd
{
get { return SearchTest.searchWd.ToLower(); }
set { SearchTest.searchWd = value; }
}
public static void SearchFiles(string fileName)
{
searchWd = fileName;
var drives = Directory.GetLogicalDrives();
Task[] tasks = new Task[drives.Length];
IList<string> files = new List<string>();
var index = 0;
foreach (var drive in drives)
{
Action dgAction = new Action(() => DgFolder(drive, ref files));
Task t = Task.Factory.StartNew(dgAction);
tasks[index] = t;
index++;
}
Stopwatch sw = new Stopwatch();
sw.Start();
Task.WaitAll(tasks);
sw.Stop();
foreach (var item in files)
{
Console.WriteLine(item);
}
Console.WriteLine("用时:" + sw.ElapsedMilliseconds + "毫秒" + Environment.NewLine + "文件总计:" + files.Count);
}
public static void DgFolder(string path, ref IList<string> files)
{
if (Directory.Exists(path))
{
string[] paths = new string[] { "" };
try
{
paths = Directory.GetFileSystemEntries(path);
}
catch { }
foreach (var p in paths)
{
DgFolder(p, ref files);
}
}
else
{
if (File.Exists(path) && Path.GetFileName(path).ToLower().Contains(SearchWd))
{
lock (locker)
{
files.Add(path);
}
}
}
}
}