私はあなたが良いディスクを持っていると仮定するつもりです。ファイルを1回スキャンして、エントリの数を数えます。ファイルに空白行がないことを保証できる場合は、ファイル内の改行の数を数えるだけで済みます。実際には各行を解析しないでください。
これで、正確にその数のエントリを使用して配列を1回割り当てることができます。これにより、アレイの過度の再割り当てが回避されます。
var numEntries = File.ReadLines(filepath).Count();
var result = new Range<int>[numEntries];
次に、ファイルをもう一度読み、次のようなコードで範囲オブジェクトを作成します。
var i = 0;
foreach (var line in File.ReadLines(filepath))
{
var parts = line.Split(',');
result[i++] = new Range<int>(long.Parse(parts[0]), long.Parse(parts[1]), int.Parse(parts[2]);
}
return result;
必要に応じて、エラー処理をいくつか振りかけます。このコードは理解しやすいです。ターゲット環境で試してみてください。遅すぎる場合は、最適化を開始できます。ただし、時期尚早に最適化することはしません。それは、必要とされない可能性のあるはるかに複雑なコードにつながるためです。