lines = new List<string>(1000 * 1000 * 200); string line = ""; using (FileStream fs = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) using (BufferedStream bs = new BufferedStream(fs)) using (StreamReader sr = new StreamReader(bs)) { while ((line = sr.ReadLine()) != null) { lines.Add(line); } } Код lines = new List<string>(1000 * 1000 * 200); string line = ""; using (FileStream fs = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) using (BufferedStream bs = new BufferedStream(fs)) using (StreamReader sr = new StreamReader(bs)) { while ((line = sr.ReadLine()) != null) { lines.Add(line); } } Первая строка - выделение памяти под лист fileName - путь до вашего файла
Можно ещё так: lines = new List<string>(1000 * 1000 * 200); Parallel.ForEach(File.ReadLines(fileName), line => { lock (lines) lines.Add(line); }); [ Код lines = new List<string>(1000 * 1000 * 200); Parallel.ForEach(File.ReadLines(fileName), line => { lock (lines) lines.Add(line); }); [ Данный код у меня работает на 1,5 - 2 секунды медленнее (при чтении 130мб: 7,5 секунд первым методом, этим - 9 - 9,5 секунд)