gpt4 book ai didi

c# - 多线程文件搜索 C#

转载 作者:行者123 更新时间:2023-11-30 20:09:22 25 4
gpt4 key购买 nike

我需要一些帮助。现在我已经完成了一个文件搜索,它将搜索我的整个硬盘并且它有效。以下是执行此操作的两种方法。

public void SearchFileRecursiveNonMultithreaded()
{
//Search files multiple drive

string[] drives = Environment.GetLogicalDrives();

foreach (string drive in drives)
{
if (GetDriveType(drive).ToString().CompareTo("DRIVE_FIXED") == 0)
{
DriveInfo driveInfo = new DriveInfo(drive);

if (driveInfo.IsReady)
{
System.IO.DirectoryInfo rootDirectory = driveInfo.RootDirectory;
RecursiveFileSearch(rootDirectory);
}
}
}
MessageBox.Show(files.Count.ToString());
}

public void RecursiveFileSearch(DirectoryInfo root)
{
DirectoryInfo[] subDirectory;
try
{
//private List<FileInfo> files = new List<FileInfo>() is declared above
files.AddRange(root.GetFiles(searchString.Text, SearchOption.TopDirectoryOnly));
}
catch (Exception)
{
}

try
{
// Now find all the subdirectories under this directory.
subDirectory = root.GetDirectories();

foreach (System.IO.DirectoryInfo dirInfo in subDirectory)
{
// Resursive call will be performed for each subdirectory.
RecursiveFileSearch(dirInfo);
}
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
}

现在我正在尝试实现并行搜索以加快搜索速度。我尝试了几个程序来让它工作。尝试使用 backgroundworker 和线程,但遇到问题并且很难调试以了解问题出在哪里?有人可以让我知道实现并行搜索的方法吗?这一步我会自己去弄清楚。我们将不胜感激提供的任何帮助。

最佳答案

首先,正如其他人所指出的,当您只搜索一个驱动器时,使用多线程不太可能加快速度。你的绝大部分时间都花在了等待磁头移动到它需要去的地方,而且一次只能在一个地方。在这里使用多线程是浪费精力,而且很可能实际上会使您的程序变慢。

其次,您可以通过调用 Directory.EnumerateFiles 来简化您的代码.如果您想同时搜索多个驱动器,只需启动多个 BackgroundWorker 实例,每个实例都使用 EnumerateFiles 来搜索不同的驱动器。

但是请注意,如果 EnumerateFiles 遇到目录权限问题,它会抛出异常(您的代码也是如此),这在搜索整个驱动​​器时并不少见。如果这是一个问题(很可能会是),那么您必须编写自己的目录搜索器。其中之一是对 this question 的回答。 .

关于c# - 多线程文件搜索 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6230029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com