Разница в скорости между Linq для XML и Excel с OledbConnection?

2

В моих текущих требованиях нужно взять таблицу Excel, которую пользователь обновляет один раз в неделю и сможет запросить этот документ для определенных полей.

Как сейчас, я просматриваю и перетаскиваю все данные Excel (2007) в xml файл (только один раз, когда они загружают файл, тогда я просто использую xml), который затем содержит все необходимые данные (не все столбцы в электронной таблице) для запросов через Linq-to-XML; обратите внимание, что xml файл меньше, чем excel.

Теперь мой вопрос: есть ли разница в производительности между запросом XML файла с Linq и файлом Excel с OledbConnection? Я просто добавляю еще один лишний шаг? Я предполагаю, что следующий вопрос будет, стоит ли его легко использовать, чтобы продолжать нажимать на xml.

Файл имеет около 1000 строк.

Теги:
linq
excel
linq-to-xml

5 ответов

4
Лучший ответ

Что-то, что делается только один раз в неделю, я не вижу необходимости выполнять какие-либо оптимизации. Вместо этого вы должны сосредоточиться на том, что может быть удобным и понятным как для вас, так и для тех, кто будет поддерживать решение в будущем.

Используйте любое решение, которое вы найдете наиболее естественным: -)

2

Как я понимаю, для доступа к данным Excel это выглядит так, как показано на рисунке.

Самый быстрый и медленный 1. Пользовательское стороннее программное обеспечение поставщика, использующее С++ непосредственно в типе файла Excel.
2. Метод OleDbConnection с использованием файла схемы, если это необходимо для типов данных, обрабатывает Excel в виде файла flatfile.
3. Метод Linq 2 XML-метода для чтения/записи данных только с форматами файлов Excel 2007.
4. Прямая обработка данных XML с использованием OOXML SDK и, возможно, сторонних библиотек xml. Опять ограничено только форматами файлов Excel 2007.
5. Использование массива Object [,] для чтения области ячеек (с использованием .Value2 prop) и передачи массива Object [,] обратно в область ячеек (снова .Value2 prop) для записи данных.
6. Обновление и чтение из ячеек индивидуально с использованием ассемблеров .Cells(x, y) и .Offset(x, y).

  • 1
    Чтобы в дальнейшем ответить на ваш вопрос. Хотя использование OleDbConnection по сравнению с linq2XML принесет небольшое общее преимущество в производительности, код Linq будет удобнее в обслуживании и его легче писать. Кроме того, код OleDbConnection более хрупок и действительно хорош только тогда, когда область данных является статической. С часто обновляемыми динамическими данными это может быть довольно сложным для программирования.
1

Я думаю, что важно обсудить, какой тип запросов вы делаете с файлом. Я должен верить, что с LINQ будет намного проще запрашивать LINQ, чем oledbconnection, хотя я больше говорю из опыта, чем что-либо еще.

1

Вы не можете использовать SqlConnection для доступа к электронной таблице Excel. Скорее всего, вы используете OleDbConnection или OdbcConnection.

Я бы предположил, что использование OleDbConnection для доступа к листу Excel будет быстрее, поскольку вы обрабатываете данные изначально, но единственный способ узнать данные, которые вы используете, - это проверить его самостоятельно, используя класс Stopwatch в пространстве имен System.Diagnostics или с помощью инструмента профилирования.

Если у вас есть много данных для обработки, вы также можете рассмотреть возможность размещения на SQL Server, а затем запрос (в зависимости от соотношения запросов и времени, необходимого для сохранения данных, конечно).

  • 0
    woops, я исправил это в вопросе - xml-файл тоже будет нативным. Я буду тестировать с секундомером.
0

Отъезд Эта ссылка: http://www.asp.net/learn/linq-videos/video-218.aspx

Ещё вопросы

Сообщество Overcoder
Наверх
Меню