C# 搜索文件内容的最快方法

C# 搜索文件内容的最快方法,c#,ajax,web-services,C#,Ajax,Web Services,我正在搜索web文件中的特定文本。用户输入文本。我需要搜索大约850个文件。下面的代码实现了我想要的功能,但大约需要11-13秒。这段代码位于我使用$.ajaxget从网页调用的web服务中。有什么方法可以改进代码以加快搜索速度吗?或者我应该看其他方面而不是我的代码 我在文档中进行替换是因为文件是如何创建的(它们使用MS Word创建web文件…又是一场战斗),它改进了我的搜索结果 var searchResults = new StringBuilder(); var parameters

我正在搜索web文件中的特定文本。用户输入文本。我需要搜索大约850个文件。下面的代码实现了我想要的功能,但大约需要11-13秒。这段代码位于我使用$.ajaxget从网页调用的web服务中。有什么方法可以改进代码以加快搜索速度吗?或者我应该看其他方面而不是我的代码

我在文档中进行替换是因为文件是如何创建的(它们使用MS Word创建web文件…又是一场战斗),它改进了我的搜索结果

var searchResults = new StringBuilder();

var parameters = searchParameters.Split('|');

var searchOnCompletePhrase = bool.Parse(parameters[1]);

var completePhrasePattern = @"\b(?:" + Regex.Escape(parameters[0].ToString()) + @")\b";

var files = Directory.GetFiles(path, "*.htm");

if (searchOnCompletePhrase && searchPhrase.Length > 1)
{
    foreach (var currentFile in files)
    {
        document.Load(currentFile);

        contents = document.DocumentNode.InnerText.Replace("\r", string.Empty)
            .Replace("\n", string.Empty)
            .Replace(" ", string.Empty)
            .Replace("  ", " ");

        if (contents.ToLower().IndexOf(searchPhrase.ToLower()) > -1)
        {
            searchResults.AppendLine(currentFile);

            searchResults.Append("|");
        }
    }
}
else
{
    var keywords = parameters[0].Split(' ');

    foreach (var currentFile in files)
    {
        document.Load(currentFile);

        contents = document.DocumentNode.InnerText.Replace("\r", string.Empty)
            .Replace("\n", string.Empty)
            .Replace(" ", string.Empty)
            .Replace("  ", " ");

        var found = true;

        foreach (var word in keywords)
        {
            if (!SearchCurrentWord(word.ToString()))
            {
                found = false;

                break;
            }
        }

        if (found)
        {
            searchResults.AppendLine(currentFile);

            searchResults.Append("|");
        }
    }
}

也许您应该尝试Parallel.Foreach而不是Foreach循环,以避免按顺序等待磁盘上的每个文件。

您需要分析代码,以了解时间花在哪里。有一个非常好的机会,即创建大量未使用字符串(如文章所示)的疯狂浪费的代码实际上并不重要,因为它仍然需要花同样的时间实际读取文件。(最重要的是,服务器上不支持Word,所以它可能工作,也可能不工作)你知道,我忘记了Parallel.Foreach。我会试试的。请告诉我搜索结果。这将我的搜索时间缩短到8秒。非常感谢。