Какой самый лучший / самый быстрый способ экспортировать большой набор данных из C #, чтобы преуспеть - PullRequest
4 голосов
/ 21 октября 2011

У меня есть код, который использует библиотеку OpenXML для экспорта данных.

У меня 20 000 строк и 22 столбца, и на это уходит много времени (около 10 минут).

Есть ли какое-либо решение, которое экспортировало бы данные из C # для достижения превосходства, которое было бы быстрее, поскольку я делаю это из приложения asp.net mvc, и у многих людей браузеры не работают.

Ответы [ 7 ]

2 голосов
/ 24 октября 2011

Если предположить, что 20 000 строк и 22 столбца по 100 байт в каждой, составляют только 41 мегабайт данных. плюс теги xml, плюс форматирование, я бы сказал, что вы в конечном итоге архивируете (.xlsx - это всего лишь несколько сжатых XML-файлов) 100 МБ данных.

Конечно, это занимает некоторое время, как и выборка данных. Я рекомендую вам использовать пакет Excel плюс плюс вместо пакета разработки Office OpenXML. http://epplus.codeplex.com/

Вероятно, есть ошибка, связанная с ошибкой / производительностью в коде Microsoft "пиши в спешке и надейся, что не взорвется слишком рано".

1 голос
/ 28 октября 2011

В итоге я использовал решение с открытым исходным кодом под названием ClosedXML, которое отлично работало

1 голос
/ 21 октября 2011

CSV.Это простой текстовый файл, но его можно открыть любой версией Excel.

Без сомнения, это более простой способ экспорта данных в Excel.Многие веб-сайты предоставляют экспорт данных в формате CSV.

Вам нужно просто добавить запятую (,) для разделения значений и разрыв строки для разделения записей.Для создания файла CSV не потребуются дополнительные ресурсы, поэтому он довольно быстрый.

0 голосов
/ 21 октября 2011

Ошибка при экспорте данных, которая чаще всего выполняется при экспорте данных в рабочий процесс

  • Модель сборки
  • Сборка XML DOM
  • Сохранить XML DOM в файл

Этот рабочий процесс приводит к дополнительным расходам, поскольку для создания XML DOM требуется время, XML DOM сохраняется в памяти вместе с моделью, а затем весь набор данных записывается в файл.

Лучший способ справиться с этим - преобразовать запись модели по записи непосредственно в целевой формат и записать ее непосредственно в (буферизованный) файл.

Формат с малыми накладными расходами, который быстро записывается и читается в Excel, - это CSV (хорошо, это устаревшее, это неудобно ...).

0 голосов
/ 21 октября 2011

Я обнаружил, что могу ускорить экспорт данных из базы данных в электронную таблицу Excel, ограничив количество операций экспорта.Я обнаружил, что, собирая 100 строк данных перед записью, скорость создания увеличилась как минимум в 5-10 раз.

0 голосов
/ 21 октября 2011

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

В этом случае вы хотите выполнить эту конкретную операцию «асинхронно». Я не уверен, подходит ли это вашему рабочему процессу, но скажу, что человек запрашивает этот большой документ в формате XML, я бы: а) поставил в очередь другой рабочий поток, чтобы запустить генерацию документа при возврате «токена» (возможно, GUID для заявителя); б) вернуть ссылку на страницу, где запрашивающий может щелкнуть ссылку (передав токен), что позволит странице просмотреть результаты.

Если поток завершил обработку документа, он помещает его в специальную папку с уникальным именем и добавляет токен в таблицу базы данных с указанием местоположения документа. Если пользователь запрашивает эту страницу, токен существует в базе данных, а документ существует в файловой системе, ему разрешается щелкать и загружать его через HTTP. Если он не существует, им либо говорят, что он не существует, либо ждать результатов. (Это сообщение может основываться на времени получения запроса.)

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

Надеюсь, я правильно прочитал этот вопрос.

0 голосов
/ 21 октября 2011

В зависимости от того, на какую версию Excel вы нацеливаетесь, вы можете представить данные в качестве службы OData, которую Excel 2010, естественно, может использовать и будет обрабатывать загрузку и форматирование для вас.

...