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))
{
////
}