2009-07-02 6 views
2

Я пишу рамки для записи коллекций в разные форматы для проекта у своего работодателя. Одним из выходных форматов являются текстовые файлы с разделителями (обычно называемые CSV), хотя CSV не всегда разделяются запятой)..NET написание текстового файла с разделителями

Я использую поставщик Microsoft.Jet.OLEDB.4.0 через OleDbConnection в ADO.net. Для чтения этих файлов это очень быстро. Однако, для написания, это очень медленно.

В одном случае у меня есть файл с 160 записями, каждый из которых имеет около 250 полей. Для создания этого файла требуется примерно 30 секунд, казалось бы, связанного с процессором.

я сделал следующее, что обеспечило значительный прирост производительности, но я не могу думать ни о чем другом:

  1. Подготовка заявления раз
  2. Использование неназванные параметров

Любое другое предложения, чтобы ускорить это?

+0

Обязательно обязательно посмотрите какой-либо код, чтобы помочь. У меня есть код C#, пишущий CSV-файлы и не вижу производительности нигде рядом с этим минимумом. – marcc

ответ

5

Как насчет «не использовать OleDbConnection» ... писать файлы с разделителями с TextWriter довольно просто (ускользает в сторону). Для чтения, CsvReader.

+0

Я написал свой собственный код экранирования и StreamWriter. Кажется, сейчас хорошо работает ... По-прежнему используя OLEBB для чтения, у меня нет проблем с производительностью из того, что я вижу. –

1

Я написал небольшой и простой набор классов у своего работодателя, чтобы сделать именно это (писать и читать CSV-файлы или другие плоские файлы с фиксированной длиной поля). Я только что использовал классы StreamRriter StreamWriter & StreamReader, и на самом деле это довольно быстро.

0

Попробуйте использовать System.Configuration.CommaDelimitedStringCollection, как этот код здесь, чтобы распечатать список объектов в TextWriter.

public void CommaSeperatedWriteLine(TextWriter sw, params Object[] list) 
{ 
    if (list.Length > 0) 
    { 
     System.Configuration.CommaDelimitedStringCollection commaStr = new System.Configuration.CommaDelimitedStringCollection(); 

     foreach (Object obj in list) 
     { 
      commaStr.Add(obj.ToString()); 
     } 

     sw.WriteLine(commaStr.ToString()); 
    } 
} 
0

Посмотрите на эту LINQ в библиотеке CSV из кода проекта: http://www.codeproject.com/KB/linq/LINQtoCSV.aspx

Я не использовал это, но пока я имел это в моем отпечатком для около года.

«Эта библиотека упрощает использование CSV-файлов с запросами LINQ».