查找文件中字符串的最快方法

use*_*148 5 c# string

我有一个不超过10KB的日志文件(文件大小最多可达2 MB),我想查找文件中是否至少有一组这些字符串.这些字符串将在不同的行上,如,

行动:.......

INPUT:...........

结果:..........

如果文件中存在一组以上,我至少需要知道.我已经做了大约100次测试(每次日志不同,所以我重新加载并读取日志),所以我正在寻找最快和下注的方式来做到这一点.

我在论坛中查找找到最快的方法,但我不认为我的文件对于那些问题来说太大了.

Thansk寻找.

Chr*_*Wue 5

我会逐行阅读并检查条件.一旦你看到一个组,你就可以退出.这样您就不需要将整个文件读入内存.像这样:

    public bool ContainsGroup(string file)
    {
        using (var reader = new StreamReader(file))
        {
            var hasAction = false;
            var hasInput = false;
            var hasResult = false;
            while (!reader.EndOfStream)
            {
                var line = reader.ReadLine();
                if (!hasAction)
                {
                    if (line.StartsWith("ACTION:"))
                        hasAction = true;
                }
                else if (!hasInput)
                {
                    if (line.StartsWith("INPUT:"))
                        hasInput = true;
                }
                else if (!hasResult)
                {
                    if (line.StartsWith("RESULT:"))
                        hasResult = true;
                }

                if (hasAction && hasInput && hasResult)
                    return true;
            }
            return false;
        }
    }
Run Code Online (Sandbox Code Playgroud)

此代码检查是否有以ACTION开头的行,然后是INPUT,然后是RESULT.如果这些顺序不重要,那么您可以省略if () else if ()检查.如果该行没有以字符串替换StartsWith为开头Contains.