В моих текущих требованиях нужно взять таблицу Excel, которую пользователь обновляет один раз в неделю и сможет запросить этот документ для определенных полей.
Как сейчас, я просматриваю и перетаскиваю все данные Excel (2007) в xml файл (только один раз, когда они загружают файл, тогда я просто использую xml), который затем содержит все необходимые данные (не все столбцы в электронной таблице) для запросов через Linq-to-XML; обратите внимание, что xml файл меньше, чем excel.
Теперь мой вопрос: есть ли разница в производительности между запросом XML файла с Linq и файлом Excel с OledbConnection? Я просто добавляю еще один лишний шаг? Я предполагаю, что следующий вопрос будет, стоит ли его легко использовать, чтобы продолжать нажимать на xml.
Файл имеет около 1000 строк.
Что-то, что делается только один раз в неделю, я не вижу необходимости выполнять какие-либо оптимизации. Вместо этого вы должны сосредоточиться на том, что может быть удобным и понятным как для вас, так и для тех, кто будет поддерживать решение в будущем.
Используйте любое решение, которое вы найдете наиболее естественным: -)
Как я понимаю, для доступа к данным 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).
Я думаю, что важно обсудить, какой тип запросов вы делаете с файлом. Я должен верить, что с LINQ будет намного проще запрашивать LINQ, чем oledbconnection, хотя я больше говорю из опыта, чем что-либо еще.
Вы не можете использовать SqlConnection для доступа к электронной таблице Excel. Скорее всего, вы используете OleDbConnection или OdbcConnection.
Я бы предположил, что использование OleDbConnection для доступа к листу Excel будет быстрее, поскольку вы обрабатываете данные изначально, но единственный способ узнать данные, которые вы используете, - это проверить его самостоятельно, используя класс Stopwatch в пространстве имен System.Diagnostics или с помощью инструмента профилирования.
Если у вас есть много данных для обработки, вы также можете рассмотреть возможность размещения на SQL Server, а затем запрос (в зависимости от соотношения запросов и времени, необходимого для сохранения данных, конечно).
Отъезд Эта ссылка: http://www.asp.net/learn/linq-videos/video-218.aspx