OutOfMemoryException при обработке больших CSV файлов - C#

Узнай цену своей работы

Формулировка задачи:

Пишу программу, которая работает с 5гб .csv файлов. Нужно чтобы данные забивались в табличку (DataGridView). Проблема в том, что через 10 секунд после запуска выбрасывается OutOfMemoryException, память нагружена почти на 100%. Как реализовать алгоритм правильно? Вот мой код файлы хранятся в нескольких папках
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);
       }
}
и List передается сюда
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))
{
////
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.786 из 5
Похожие ответы