0

私は C# とオブジェクト指向プログラミング全般に不慣れです。非常に大きなテキスト ファイルを解析するアプリケーションがあります。

私は2つの辞書を持っています:

Dictionary<string, string> parsingDict //key: original value, value: replacement Dictionary<int, string> Frequency // key: count, value: counted string

各キーの周波数を見つけています。次の目的の出力を取得できます。

System1 が MachineA に 5 回置き換えられました

System2 は MachineB に 7 回置き換えられました

System3 は MachineC に 10 回置き換えられました

System4 は MachineD に 19 回置き換えられました

以下は私のコードです:

String[] arrayofLine = File.ReadAllLines(File);
           foreach (var replacement in parsingDict.Keys)
        {
            for (int i = 0; i < arrayofLine.Length; i++)
            {
                if (arrayofLine[i].Contains(replacement))
                {
                    countr++;

                    Frequency.Add(countr, Convert.ToString(replacement));
                }
            }

        }


        Frequency = Frequency.GroupBy(s => s.Value)
                .Select(g => g.First())
                .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);  //Get only the distinct records.

        foreach (var freq in Frequency)
        {
            sbFreq.AppendLine(string.Format("The text {0} was replaced {2} time(s) with {1} \n",
            freq.Value, parsingDict[freq.Value],
            arrayofLine.Where(x => x.Contains(freq.Value)).Count())); 
        }

を使用String[] arrayofLine = File.ReadAllLines(File);すると、メモリ使用率が増加します。

どのように arrayofLine.Where(x => x.Contains(freq.Value)).Count())を File.ReadLine を使用して実現できますか?

4

2 に答える 2