OutOfMemoryException при обработке больших CSV файлов - C#
Формулировка задачи:
Пишу программу, которая работает с 5гб .csv файлов. Нужно чтобы данные забивались в табличку (DataGridView).
Проблема в том, что через 10 секунд после запуска выбрасывается OutOfMemoryException, память нагружена почти на 100%. Как реализовать алгоритм правильно?
Вот мой код
файлы хранятся в нескольких папках
и List передается сюда
List<string> list = new List<string>(); var dir = Directory.GetDirectories("Files/"); foreach(string path in dir) { var files = Directory.GetFiles(path); foreach(string FilePath in files) { list.Add(FilePath); } }
public class DataLoader { List<string> listOfFiles; public DataLoader(List<string> listOfFiles) { this.listOfFiles = listOfFiles; } public List<Reference> LoadData() { List<Reference> dataList = new List<Reference>(); foreach (string file in listOfFiles) { TextReader textReader = File.OpenText(file); string Line = null; while((Line = textReader.ReadLine()) != null) { string[] cells = Line.Split(';'); Reference reference = new MainFrame.Reference(); reference.id = cells[0]; reference.category = cells[1]; reference.someDigits = cells[2]; reference.hashCode = cells[3]; reference.name = cells[4]; reference.date = cells[5]; dataList.Add(reference); } textReader.Close(); } return dataList; } public DataTable GetDataTable() { List<Reference> data = LoadData(); DataTable table = new DataTable(); DataColumn c1 = new DataColumn("id", typeof(string)); DataColumn c2 = new DataColumn("category", typeof(string)); DataColumn c3 = new DataColumn("someDigits", typeof(string)); DataColumn c4 = new DataColumn("hashCode", typeof(string)); DataColumn c5 = new DataColumn("name", typeof(string)); DataColumn c6 = new DataColumn("date", typeof(string)); table.Columns.Add(c1); table.Columns.Add(c2); table.Columns.Add(c3); table.Columns.Add(c4); table.Columns.Add(c5); table.Columns.Add(c6); foreach(Reference reference in data) { DataRow row = table.NewRow(); row.ItemArray = new string[] { reference.id, reference.category, reference.someDigits, reference.hashCode, reference.name, reference.date }; table.Rows.Add(row); } return table; } }
Решение задачи: «OutOfMemoryException при обработке больших CSV файлов»
textual
Листинг программы
using(var textReader= File.OpenText(file)) { //// }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д