Возможно ли увеличить скорость печати с нескольких листов?

Автор Тема: Возможно ли увеличить скорость печати с нескольких листов?  (Прочитано 6873 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн JohnJАвтор темы

  • ADN Club
  • **
  • Сообщений: 78
  • Карма: 1
  • c# autocad
  • Skype: johnj255work
Я сделал программу, которая может печатать с указанного набора листов, либо искать листы в модели и печатать их сразу оттуда. Оказалось, что печать с модели происходит в разы быстрее, а на тяжёлых чертежах - быстрее на порядки.
Что нужно сделать, что бы печать из листов была столь же быстрой, либо с очень небольшой разницей?
Подозреваю, что задержка связана с тем, что печататься может только отображаемый лист и вот на это отображение и уходит время.
Я даже сделал небольшой замер. Хотя он не вполне показательный (используются маленькие и лёгкие листы в небольшом количестве), тем не менее, общую картину отображает.
Длительность печати листов из Модели: 00:00:04.5472938
Длительность печати из Листов: 00:00:11.3271731

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
На всякий случай уточняю: опция фоновой печати отключена в настройках?

Оффлайн JohnJАвтор темы

  • ADN Club
  • **
  • Сообщений: 78
  • Карма: 1
  • c# autocad
  • Skype: johnj255work
Да, я приложил код к своему первому сообщению этой темы.
Вот код метода печати:
Код - C# [Выбрать]
  1.         public void PrintLayout(PlotSettings plot_settings, ObjectId layout_id, string layout_name, string filename = "") {
  2.             var bg_plot = Application.GetSystemVariable("BACKGROUNDPLOT");
  3.             try {
  4.                 Application.SetSystemVariable("BACKGROUNDPLOT", 0);
  5.  
  6.                 if (PlotFactory.ProcessPlotState != ProcessPlotState.NotPlotting) throw new Exception("Плоттер в данный момент занят");
  7.                 using (var plot_info = new PlotInfo {Layout = layout_id}) {
  8.                     plot_info.OverrideSettings = plot_settings;
  9.                     Print(layout_name, plot_info, filename);
  10.                 }
  11.  
  12.             } finally {
  13.                 Application.SetSystemVariable("BACKGROUNDPLOT", bg_plot);
  14.             }
  15.         }

Хотя тут получается, что печать каждого листа предваряется переключением значения этой команды, а затем снова возвращается. Может нужно перед печатью всех листов отключать, а после печати всех листов возвращать?

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Каковы текущие настройки регенерации, а так же обновления полей (Fields)? Возможно стоит поиграться с ними, чтобы несколько ускорить процесс.

Оффлайн JohnJАвтор темы

  • ADN Club
  • **
  • Сообщений: 78
  • Карма: 1
  • c# autocad
  • Skype: johnj255work
А какие существуют настройки регенерации? Я нашёл в настройках только "Регенерация вкладок". Там можно выставить кэширование, но это поможет только при неоднократном посещении листа.
Про обновление Полей не нашёл настроек...

Оффлайн JohnJАвтор темы

  • ADN Club
  • **
  • Сообщений: 78
  • Карма: 1
  • c# autocad
  • Skype: johnj255work
Может нужно перед печатью всех листов отключать, а после печати всех листов возвращать?
После этого результаты слегка улучшились (провёл несколько запусков, результаты примерно совпадают с этими):
Длительность печати листов из Модели: 00:00:04.5081153
Длительность печати из Листов: 00:00:10.0326978

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
А какие существуют настройки регенерации? Я нашёл в настройках только "Регенерация вкладок". Там можно выставить кэширование, но это поможет только при неоднократном посещении листа.
Про обновление Полей не нашёл настроек...
Хотя я бы не рекомендовал совсем снимать обозначенные галочки в настройках регенерации Fields. Я надеюсь, что регенерация полей автокадом делается один раз, перед пакетной печатью, а не перед печатью каждого листа. Как вариант, можно попробовать вызвать регенерацию один раз, перед пакетной печатью, затем отключить и восстановить в исходное состояние по завершении пакетной печати.