Печать из WPF слишком медленная - PullRequest
6 голосов
/ 12 августа 2011

У меня есть приложение WPF, и мне нужно распечатать его. Ранее я публиковал вопрос о печати без необходимости отображать окно подтверждения и получил отличный ответ, который я реализовал, как показано ниже:

var pq = LocalPrintServer.GetDefaultPrintQueue();
var writer = PrintQueue.CreateXpsDocumentWriter(pq);
var paginator = newPass.docMain.Document.DocumentPaginator;
writer.Write(paginator);

Этот код работает отлично и просто - он просто берет локальный принтер и отправляет документ XPS. Тем не менее, это относительно медленно для печати. Я попытался сузить возможности, и похоже, что наибольшая разница в скорости между машинами WinXP и Win7. На XP это медленно, но приемлемо, печатать примерно 2-3 секунды, в то время как на Win7 это может быть больше 10 секунд, и 15 секунд не редкость. Есть ли причина, почему этот код будет иметь такую ​​разницу в скорости? Кроме того, я заметил, что здесь есть несколько вопросов о скорости печати WPF - есть ли причина, почему печать WPF вообще медленная?

Ответы [ 4 ]

1 голос
/ 22 августа 2011

Большинство проблем со скоростью печати, которые я видел, были связаны с драйвером принтера. Задача драйвера принтера состоит в том, чтобы преобразовать графические инструкции (в данном случае поступающие от WPF) в инструкции, понятные для принтера, так называемые PDL (обычно PCL или PostScript). Часто PDL поддерживает только подмножество графических возможностей, и, следовательно, сложные инструкции приводят к огромным заданиям PDL. Сглаживание прозрачности является пресловутым.

0 голосов
/ 21 августа 2011

Первое, что приходит мне в голову, это посмотреть, работает ли драйвер принтера под Windows 7 медленнее.Тогда я бы обвинял WPF.Попробуйте использовать другой принтер или драйвер принтера.

0 голосов
/ 16 августа 2011

Я пытался воспроизвести вашу проблему на моем собственном компьютере для разработки, Windows 7 (64-битном) ПК. При почти тривиальной одностраничной печати FixedDocument печать кажется почти мгновенной (значительно меньше 1 секунды). Печать выполнялась на стандартном корпоративном сетевом принтере, а также на локальном устройстве записи PDF (DoPDF), и оба работали хорошо. Что-то определенно кажется другим с вашей стороны, и я думаю, вы преждевременно предполагаете, что это проблема WPF.

Чтобы сузить вашу проблему, я хотел бы рассмотреть / попробовать следующее:

  • Проверьте, какая строка (и) кода длится дольше всего. Это можно сделать за несколько секунд, вставив строки, подобные этой: int point1 = Environment.TickCount; Вычитание последующих точек друг от друга даст вам время, прошедшее между точками в миллисекундах. Или посмотрите в класс Stopwatch. Эта информация должна сузить суть проблемы.
  • Сравните производительность печати изнутри WPF с производительностью других приложений. Может ли такой же сложный документ MS Word печатать быстрее?
  • Проверьте, какие данные поступают «по проводам» на принтер. Возможно, что данные, отправляемые на принтер, намного больше, чем вы ожидаете, например, если он содержит изображения, которые не уменьшаются в источнике.

В целом, безусловно, было бы полезно, если бы вы предоставили больше информации о вашей конкретной ситуации, например, Вы печатаете по сети или на USB-принтеры? Насколько велик размер печатаемого документа и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...