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))
- {
- ////
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д