在C#中搜索简单关键字的ASCII文件的最快方法?

时间:2010-11-27 00:05:55

标签: c# .net performance io

现在,我在ASCII文件中搜索这样的简单关键字:

int SearchInFile (string file, string searchString)
{
    int num = 0;

    StreamReader reader = File.OpenText (file);
    string line = reader.ReadLine();

    while (line != null)
    {
        int count = CountSubstrings(line, searchString);
        if (count != 0)
        {
            num += count;
        }
        line = reader.ReadLine();
    }

    reader.Close();

    return num;
}

这是最快,最有效的内存方式吗?如果计数会对搜索方式产生巨大影响,那么返回计数是可选的,但不是单独存在。

我用它像:

SearchInFile ( "C:\\text.txt", "cool" );

3 个答案:

答案 0 :(得分:5)

在非托管代码中,性能方面最有效的方法是使用Memory-Mapped Files而不是在缓冲区中读取文件。我确信只有在这种方式下才能实现最佳结果,特别是如果您要扫描的文件可能是来自远程存储的文件(来自服务器的文件)。

我不确定相应的.NET 4.0 classes的使用情况与您的情况完全相同。

答案 1 :(得分:4)

使用StreamReader的ReadToEnd方法将文本文件加载到一个大字符串中,然后使用string.IndexOf():

string test = reader.ReadToEnd();

test.indexOf("keyword")

答案 2 :(得分:1)

如果你真的想要更高的性能(处理大约数百MB或GB的文件),那么你应该按照大约1k的块读取字符串,然后对它们进行搜索,而不是逐行搜索。 。尽管必须处理一些边界条件,但这应该更快。

话虽这么说,你应该应用像ANTS这样的探查器,看看这是否真的是你的瓶颈。