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

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

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

Пишу программу, которая работает с 5гб .csv файлов. Нужно чтобы данные забивались в табличку (DataGridView). Проблема в том, что через 10 секунд после запуска выбрасывается OutOfMemoryException, память нагружена почти на 100%. Как реализовать алгоритм правильно? Вот мой код файлы хранятся в нескольких папках
Листинг программы
  1. List<string> list = new List<string>();
  2. var dir = Directory.GetDirectories("Files/");
  3. foreach(string path in dir)
  4. {
  5. var files = Directory.GetFiles(path);
  6. foreach(string FilePath in files)
  7. {
  8. list.Add(FilePath);
  9. }
  10. }
и List передается сюда
Листинг программы
  1. public class DataLoader
  2. {
  3. List<string> listOfFiles;
  4. public DataLoader(List<string> listOfFiles)
  5. {
  6. this.listOfFiles = listOfFiles;
  7. }
  8. public List<Reference> LoadData()
  9. {
  10. List<Reference> dataList = new List<Reference>();
  11. foreach (string file in listOfFiles)
  12. {
  13. TextReader textReader = File.OpenText(file);
  14. string Line = null;
  15. while((Line = textReader.ReadLine()) != null)
  16. {
  17. string[] cells = Line.Split(';');
  18. Reference reference = new MainFrame.Reference();
  19. reference.id = cells[0];
  20. reference.category = cells[1];
  21. reference.someDigits = cells[2];
  22. reference.hashCode = cells[3];
  23. reference.name = cells[4];
  24. reference.date = cells[5];
  25. dataList.Add(reference);
  26. }
  27. textReader.Close();
  28. }
  29. return dataList;
  30. }
  31. public DataTable GetDataTable()
  32. {
  33. List<Reference> data = LoadData();
  34. DataTable table = new DataTable();
  35. DataColumn c1 = new DataColumn("id", typeof(string));
  36. DataColumn c2 = new DataColumn("category", typeof(string));
  37. DataColumn c3 = new DataColumn("someDigits", typeof(string));
  38. DataColumn c4 = new DataColumn("hashCode", typeof(string));
  39. DataColumn c5 = new DataColumn("name", typeof(string));
  40. DataColumn c6 = new DataColumn("date", typeof(string));
  41. table.Columns.Add(c1);
  42. table.Columns.Add(c2);
  43. table.Columns.Add(c3);
  44. table.Columns.Add(c4);
  45. table.Columns.Add(c5);
  46. table.Columns.Add(c6);
  47. foreach(Reference reference in data)
  48. {
  49. DataRow row = table.NewRow();
  50. row.ItemArray = new string[] { reference.id, reference.category, reference.someDigits, reference.hashCode, reference.name, reference.date };
  51. table.Rows.Add(row);
  52. }
  53. return table;
  54. }
  55. }

Решение задачи: «OutOfMemoryException при обработке больших CSV файлов»

textual
Листинг программы
  1. using(var textReader= File.OpenText(file))
  2. {
  3. ////
  4. }

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


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

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

14   голосов , оценка 3.786 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы