DataTable
потребует загрузки целиком в память сразу. Не делай этого. Вместо этого обрабатывайте как внутри, так и вне файлы csv как потоки. Вот очень хороший читатель CSV, который позволит вам читать и работать на одной записи за один раз:
A Fast CSV Reader,
http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader
Вы хотите открыть исходный код для чтения и пункт назначения для записи в одно и то же время. Когда вы читаете строку из источника, обрабатываете ее, а затем пишите в пункт назначения. У вас никогда не должно быть больше строки или нескольких строк в памяти. Это будет гораздо более эффективным как с точки зрения использования памяти, так и с точки зрения производительности.
Для более высокой производительности вы можете использовать отдельные потоки чтения/записи и очередь производителей/потребителей, но для этого требуется намного больше управления, чтобы гарантировать, что очередь не будет насыщенной и в зависимости от ситуации и относительного чтения/обработки/записи производительность, это более сложное решение может вообще не повысить производительность.
спасибо. Я попытаюсь реализовать этот шаблон. Как бы вы это сделали, если источник данных поступает из SQL-запроса. Вы читали бы данные в куски, а затем использовали шаблон производителя/потребителя, а затем записывали данные для каждого набора данных, которые вы получаете? – Paul
@Paul использует 'IDataReader' вместо' DataTable', и вы будете обрабатывать его по одной строке за раз. В общем, всегда используйте считыватель данных, если это вообще возможно, и избегайте таблиц данных, когда это не необходимо (но не избегайте любой ценой, просто если это достаточно просто, чтобы использовать читатель вместо этого, или если у вас много данных). –
спасибо! – Paul