2009-02-04 2 views
2

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

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

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

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

ответ

4

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

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

1

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

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

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

+0

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

1

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

2

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

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