Сейчас у нас есть один поток, который проходит через каждый клиента и генерирует два письма. Оригинал, отправленный по почте, и второй с водяным знаком на странице с надписью «Копировать» (некоторые глупые бизнес-правила, но иногда так и бывает).
В моей среде разработки первая буква генерируется примерно за 30-40 секунд, а вторая менее чем за 5 секунд. Это работает как консольное приложение локально. Последующие письма (для второго клиента) занимают менее 5 секунд каждое (без долгой первой попытки). По крайней мере, пока я не перезапущу приложение или не пройдет более длительный период времени, после чего я снова получаю длинное письмо, а затем короткие.
В тестовой среде мы запускаем его как веб-задание в Azure, и на каждую букву уходит 30-40 секунд. Каждый раз. И оригинал, и копия для каждого клиента (а также другие PDF-файлы, которые мы также создаем).
Где несоответствие? Я пробовал немного убрать CSS (удалив border-radius и box-shadow в некоторых других сообщениях), но получаю те же результаты. Моей первой мыслью было то, что библиотека заново создает файлы wkhtmltopdf каждый раз, когда я объявляю новый объект HtmlToPdfConverter() (что я и делаю каждый раз). Однако я попробовал использовать один статический объект и не увидел никаких изменений (по крайней мере, не в разработке — я не обновлял тест, так как это, похоже, не имело никакого значения). Кто-нибудь знает, какие правила и логику использует библиотека для воссоздания каталога/файлов перед запуском процесса нового поколения? Может ли это быть какая-то проблема с кешированием? Изображения, которые каким-то образом сохраняются в памяти, что ускоряет последующие запуски? Есть ли разница между отладочной и выпускной сборками?
Другие факты, которые, по моему мнению, могут иметь значение. Во входном содержимом не выполняется Javascript. Помимо изображений, нет никаких внешних файлов — ни CSS, ни шрифтов и т. д. Код, который я использую, в основном следующий:
Код: Выделить всё
var pdfGen = new HtmlToPdfConverter();
pdfGen.Size = PageSize.Letter;
pdfGen.Margins = new PageMargins() { Bottom = 0, Left = 0, Right = 0, Top = 0 };
pdfGen.CustomWkHtmlArgs = "--dpi 600";
return pdfGen.GeneratePdf( htmlContent );
Изменить 1:
Вот журналы, которые я получил, когда включил их, вместе с временными метками. Кажется, это одна строка («Подсчет страниц 2/6»), которая занимает все время, но я не знаю, как интерпретировать, что на самом деле происходит в это время.
Код: Выделить всё
14:12:57.941 - [> ] 0%
14:12:57.942 - [======> ] 10%
14:12:57.951 - [=======> ] 13%
14:12:58.005 - Warning: SSL error ignored
14:12:58.006 - Warning: SSL error ignored
14:12:58.006 - Warning: SSL error ignored
14:12:58.007 - Warning: SSL error ignored
14:12:58.007 - Warning: SSL error ignored
14:12:58.008 - Warning: SSL error ignored
14:12:58.016 - [==========> ] 17%
14:12:58.237 - [==================> ] 30%
14:12:58.311 - [===============================================> ] 79%
14:12:58.312 - [============================================================] 100%
14:13:34.795 - Counting pages (2/6)
14:13:34.796 - [============================================================] Object 1 of 1
14:13:34.796 - Resolving links (4/6)
14:13:34.797 - [============================================================] Object 1 of 1
14:13:34.797 - Loading headers and footers (5/6)
14:13:34.798 - Printing pages (6/6)
14:13:34.798 - [> ] Preparing
14:13:34.798 - [============================================================] Page 1 of 1
14:13:34.958 - Done
- Я удалил URL-ссылки на изображения (единственные мои внешние ресурсы) и заменил их представлениями в формате Base64 — без изменений.
- Я удалил настройку 600 точек на дюйм — без изменений.
- В исходном HTML-коде были указаны неправильные URL-адреса, и это приводило к перенаправлению на правильные URL-адреса. Я изменил их так, чтобы они были правильными с первого раза - никаких изменений.
- Согласно комментарию KJ, я попытался создать эту страницу с тем же исполняемым файлом, который используется NReco (скопировать/вставить параметры из комментария ). В первый раз мне потребовалось 38 секунд. Примерно через минуту я сделал это снова, и это произошло мгновенно. Итак, там происходит кое-что примечательное.
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/765 ... e-same-pdf