Как ускорить генерацию файлов Word из C #? - PullRequest
5 голосов
/ 08 декабря 2009

Я работаю над приложением, которое генерирует относительно большой объем вывода Word. В настоящее время мы используем службы Word Interop для создания документов, но это довольно медленно, особенно в старых (до 2007 года) версиях Office. Мы хотели бы ускорить поколение.

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

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

Итак ... Я ищу предложения по альтернативным способам ускорения генерации файлов Word.

Мы не можем просто переименовать сгенерированные файлы HTML в .doc, и мы не можем вместо этого генерировать RTF - в обоих случаях важная информация о форматировании теряется, а в случае RTF встроенная графика не работает надежно .

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

Ответы [ 2 ]

5 голосов
/ 08 декабря 2009

Если вы можете себе это позволить, я бы порекомендовал продукт Aspose.Words. Очень быстро и Word не нужно устанавливать.

Также гораздо проще использовать офисную связь.

1 голос
/ 08 декабря 2009

Ваш макроподход - именно то, как мы ускорили медленное взаимодействие с Excel (я думаю, с использованием версии 2003).

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

Я думаю, что подход «макрос + шаблон» с радостью переведет.

...