Разница в скорости между Linq для XML и Excel с OledbConnection? - PullRequest
2 голосов
/ 04 февраля 2009

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

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

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

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

Ответы [ 5 ]

4 голосов
/ 06 февраля 2009

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

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

2 голосов
/ 21 декабря 2010

Насколько я понимаю, с точки зрения производительности доступ к данным Excel таков.

Самый быстрый к медленному
1. Пользовательское программное обеспечение сторонних поставщиков, использующее C ++ непосредственно для типа файла Excel.
2. Метод OleDbConnection, использующий файл схемы, если это необходимо для типов данных, рассматривает Excel как плоский файл.
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 голос
/ 06 февраля 2009

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

1 голос
/ 05 февраля 2009

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

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

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

0 голосов
/ 12 июля 2009

Проверить эту ссылку: http://www.asp.net/learn/linq-videos/video-218.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...