Я загружаю данные CSV из файлов в таблицу данных для обработки.
Проблема в том, что я хочу обработать несколько файлов, и мои тесты с datatable показывают мне огромное потребление памяти, которое я тестировал с файлом csv 37 МБ, и память выросла до 240 МБ, что является очень большим ИМХО. Я читал, что в таблице данных есть накладные расходы, и я мог бы жить с размером около 70 МБ, но не 240 МБ, что означает, что это в шесть раз больше исходного размера. Я читал здесь, что таблицам данных требуется больше памяти, чем POCO, но эта разница слишком велика.
Поставил профайлер памяти и посмотрел, есть ли у меня утечки памяти и где память. Я обнаружил, что столбцы данных имеют от 6 МБ до 19 МБ, заполненные строками, а таблица данных содержит около 20 столбцов. Значения хранятся в столбцах? Почему уходит столько памяти, что можно сделать, чтобы уменьшить потребление памяти. При таком потреблении памяти таблицы данных кажутся непригодными для использования.
Были ли у кого-нибудь такие проблемы с таблицами данных, или я что-то делаю не так?
PS: Я попробовал файл размером 70 МБ, и таблица данных выросла до 500 МБ!
Хорошо, вот небольшой тестовый пример: csv-файл 37 МБ (21 столбец) позволил увеличить память до 179 МБ.
private static DataTable ReadCsv()
{
DataTable table = new DataTable();
table.BeginLoadData();
using (var reader = new StreamReader(File.OpenRead(@"C:\Develop\Tests\csv-Data\testdaten\test.csv")))
{
int y = 0;
int columnsCount = 0;
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(',');
if (y == 0)
{
columnsCount = values.Count();
// create columns
for (int x = 0; x < columnsCount; x++)
{
table.Columns.Add(new DataColumn(values[x], typeof(string)));
}
}
else
{
if (values.Length == columnsCount)
{
// add the data
table.Rows.Add(values);
}
}
y++;
}
table.EndLoadData();
table.AcceptChanges();
}
return table;
}
8GB RAM and more
, это правда, но есть еще много других, использующих компьютеры2GB RAM and less
. Я не думаю, что приложение, потребляющее2xx
МБ ОЗУ, является тривиальной проблемой, если фактические данные составляют всего2x
МБ. - person King King   schedule 26.08.2013