最近在一些论坛用户的宝贵帮助下,我开发了一个文件夹和子文件夹的搜索应用程序。这是代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace Procura_Desenhos
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static List<string> pathsToFind = new List<string>();
private void txt_procura_TextChanged(object sender, EventArgs e)
{
}
private void btn_procura_Click(object sender, EventArgs e)
{
string originalPath = @"c:\";
string findPath = txt_procura.Text;
FolderNames(originalPath);
List<string> paths = pathsToFind;
IEnumerable<string> filteredPaths = paths.Where(x => x.Remove(0,x.LastIndexOf('\\') + 1) == findPath);
foreach (string path in filteredPaths)
{
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo()
{
FileName = "explorer.exe",
Arguments = path,
UseShellExecute = true,
Verb = "open"
});
}
}
public static void FolderNames(string path)
{
pathsToFind.Add(path);
DirectoryInfo dir = new DirectoryInfo(path);
try
{
foreach (DirectoryInfo info in dir.GetDirectories())
{
FolderNames(info.FullName);
}
}
catch (Exception)
{
}
}
}
}
然而路径C:它仅用于测试(var root = new DirectoryInfo(@&#34; C:\&#34;);)目标是本地服务器上的应用程序搜索文件夹(var root) = new DirectoryInfo(@&#34; \ vgst \ clients \&#34;);)。
在文件夹客户端内部有数百个子目录,其中唯一的ID不会重复,此ID是参考销售。
已经过测试并且应用程序正常运行,但搜索速度非常慢,有时需要几分钟才能打开我们发送到搜索的文件夹。
有没有办法加速搜索?
再次感谢。
答案 0 :(得分:0)
我过去曾试图加速这种事情并且我从来没有得到任何结果 - 分析显示大部分时间都没有花在我的代码上。除了保持IO干净之外,你不能对IO绑定进程做多少。
有一点很糟糕 - 线程化。不要尝试使用多个线程同时读取多个目录 - 是的,你可以使用其他CPU内核但是你会让头部反弹更多,最终结果会更慢。 (请注意,我在SSD上测试了不,结果可能会有所不同!)
我发现的两件事确实会产生性能提升在某些情况下是使用线程对数据进行额外处理,如果我需要更多,则使用低级API进行文件查找只是名字。