2015-07-29 4 views
1

Я пытаюсь манипулировать большим набором (10 миллионов записей) данных, которые я импортировал в datatable. Я не думаю, что datatable является наиболее эффективным способом манипулирования большим набором данных в памяти. У кого-нибудь есть лучший способ сделать это? То, что я пытаюсь сделать, - это содержимое CSV-файла, которое обрабатывает некоторые данные и реэкспортирует результаты в другой файл CSV.Манипулирование большим набором данных CSV в памяти

ТИА, Пол

ответ

0

DataTable потребует загрузки целиком в память сразу. Не делай этого. Вместо этого обрабатывайте как внутри, так и вне файлы csv как потоки. Вот очень хороший читатель CSV, который позволит вам читать и работать на одной записи за один раз:

A Fast CSV Reader,

http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader

Вы хотите открыть исходный код для чтения и пункт назначения для записи в одно и то же время. Когда вы читаете строку из источника, обрабатываете ее, а затем пишите в пункт назначения. У вас никогда не должно быть больше строки или нескольких строк в памяти. Это будет гораздо более эффективным как с точки зрения использования памяти, так и с точки зрения производительности.

Для более высокой производительности вы можете использовать отдельные потоки чтения/записи и очередь производителей/потребителей, но для этого требуется намного больше управления, чтобы гарантировать, что очередь не будет насыщенной и в зависимости от ситуации и относительного чтения/обработки/записи производительность, это более сложное решение может вообще не повысить производительность.

+0

спасибо. Я попытаюсь реализовать этот шаблон. Как бы вы это сделали, если источник данных поступает из SQL-запроса. Вы читали бы данные в куски, а затем использовали шаблон производителя/потребителя, а затем записывали данные для каждого набора данных, которые вы получаете? – Paul

+0

@Paul использует 'IDataReader' вместо' DataTable', и вы будете обрабатывать его по одной строке за раз. В общем, всегда используйте считыватель данных, если это вообще возможно, и избегайте таблиц данных, когда это не необходимо (но не избегайте любой ценой, просто если это достаточно просто, чтобы использовать читатель вместо этого, или если у вас много данных). –

+0

спасибо! – Paul

Смежные вопросы