2008 Server + Terminal +OLE = тормоза

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1411
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 12 раз
Поблагодарили: 2 раза
Контактная информация:

2008 Server + Terminal +OLE = тормоза

Сообщение RaFaeL »

Наткнулись на проблему
Вкратце суть: в терминале на сервере 2008 и выше медленно работает OLE
Вот например такой код

Код: Выделить всё

    WordBasic=create(0, create:ole)
    WordBasic{PROP:Create}          = 'Word.Application'
    WordBasic{'Application.Activate'}
    WordBasic{'Visible'}=0
    WordBasic{'Documents.Add'}

    loop i#=1 to records(LOC:VariablesQ)
      get(LOC:VariablesQ,i#)
      WordBasic{'ActiveDocument.Variables.Add("'&clip(VQ:Name)&'","'&clip(VQ:Name)&'")'}
    end
  
    loop i#=1 to WordBasic{'ActiveDocument.Variables.Count'}
      WordBasic{'ActiveDocument.Variables('&i#&').Value'}=WordBasic{'ActiveDocument.Variables('&i#&').Name'}
    end

    WordBasic{'Visible'}=1
    WordBasic{PROP:Deactivate}
    WordBasic{PROP:Deactivate}
    WordBasic{PROP:Deactivate}
    destroy(WordBasic)
Если имеем порядка 30 тыс переменных, то этот код на связке Server 2008 +Word 2013 + терминал идёт ПОЛТОРА ЧАСА
Причем заметно, что сначала скорость более-менее, а потом чем дальше тем дольше
То же самое на связке Server 2003 + Word 2003 + терминал выполняется 1-2 минуты
В реальных условиях переменных конечно не 30 тыс, а допустим 1-2 тыс, но несколько минут пользователь тоже ждать не может (вместо пары секунд вне терминала)
В инете наткнулся на несколько обсуждений аналогичных проблем
Например: https://social.technet.microsoft.com/Fo ... ws2008r2ru
Еще: http://www.cyberforum.ru/com-ole/thread826744.html
Т.е. Кларион тут как бы не при чем
Может кто сталкивался и знает решение?
Аватара пользователя
morkovin
Ветеран
Сообщения: 935
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 9 раз
Поблагодарили: 4 раза
Контактная информация:

2008 Server + Terminal +OLE = тормоза

Сообщение morkovin »

что сначала скорость более-менее, а потом чем дальше тем дольше
http://blogs.msdn.com/b/emeadaxsupport/ ... erver.aspx
Случайно наткнулся. Ключевые слова Paged Pool и Session Paged Pool
If however Terminal Services in Application Mode are installed, the memory is allocated Session Paged Pool instead! The Session Paged Pool is a lot smaller than the regular Paged Pool
WBR, morkovin
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1411
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 12 раз
Поблагодарили: 2 раза
Контактная информация:

2008 Server + Terminal +OLE = тормоза

Сообщение RaFaeL »

Я нашел решение ))
Оно весьма неожиданное
http://www.forum.mista.ru/topic.php?id=544389
kreator
✯ Ветеран ✯
Сообщения: 5159
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

2008 Server + Terminal +OLE = тормоза

Сообщение kreator »

RaFaeL писал(а):Я нашел решение ))
Оно весьма неожиданное
http://www.forum.mista.ru/topic.php?id=544389
Вообще, очень странно. Мой опыт говорит, что в режиме "Visible" сильно дольше работает. Ну если Word совсем умирает на терминале, тогда может быть. Сейчас стараюсь использовать Excel, у него, кажется, таких проблем нет.
We are hard at work… for you. :)
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1411
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 12 раз
Поблагодарили: 2 раза
Контактная информация:

2008 Server + Terminal +OLE = тормоза

Сообщение RaFaeL »

kreator писал(а): Вообще, очень странно. Мой опыт говорит, что в режиме "Visible" сильно дольше работает. Ну если Word совсем умирает на терминале, тогда может быть. Сейчас стараюсь использовать Excel, у него, кажется, таких проблем нет.
Я WordBasic{'Visible'}=0 заменил на

Код: Выделить всё

WordBasic{'Application.ScreenUpdating'}=0
Скорость не уменьшилась, зато в терминале стала адекватной
kreator
✯ Ветеран ✯
Сообщения: 5159
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

2008 Server + Terminal +OLE = тормоза

Сообщение kreator »

Интересно, а что такое "переменные"? Я так никогда не делал. Или просто термина не знаю.
We are hard at work… for you. :)
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1411
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 12 раз
Поблагодарили: 2 раза
Контактная информация:

2008 Server + Terminal +OLE = тормоза

Сообщение RaFaeL »

Смысл такой: сначала в шаблоне расставляешь поля, куда будут попадать переменные. Затем по OLE их заполняешь
http://kb.mista.ru/article.php?id=452
Т.е. делаешь например шаблон договора, а названия, реквизиты передаешь потом из карточки клиента
kreator
✯ Ветеран ✯
Сообщения: 5159
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

2008 Server + Terminal +OLE = тормоза

Сообщение kreator »

А приведённый выше пример как с этим соотносится?
Я, например, создаю шаблон и в шаблоне делаю закладки. Потом на эти места вставляю нужные значения вот так:

Код: Выделить всё

?Word{'WW7_EditGoto("Date")'}
?Word{'Insert("'&LOC:DateString&'")'}
Пользователи при этом могут сами менять шаблон. Главное, чтобы закладки присутствовали. Правда, в 99,99% случаев для пользователя это сложновато. Вернее, ему не по статусу :D . И по моим ощущениям простая вставка достаточно быстра. Вот таблица рисуется очень долго. А вот с:

Код: Выделить всё

WordBasic{'ActiveDocument.Variables.Add("'&clip(VQ:Name)&'","'&clip(VQ:Name)&'")'}
WordBasic{'ActiveDocument.Variables('&i#&').Value'}=WordBasic{'ActiveDocument.Variables('&i#&').Name'}
не сталкивался. Не понятно. Может потому что кусок кода только?
We are hard at work… for you. :)
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1411
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 12 раз
Поблагодарили: 2 раза
Контактная информация:

2008 Server + Terminal +OLE = тормоза

Сообщение RaFaeL »

Этот кусок кода всего лишь добавляет переменные при подготовке шаблона и ставит "значение переменной"="имя переменной" чтобы при вставке переменной пользователем у него в тексте сразу отображалось что-то, нужные значения проставляются в другом куске кода

Код: Выделить всё

  loop i#=1 to records(FieldsQ)
    get(FieldsQ,i#)
    WordBasic{'ActiveDocument.Variables("'&clip(FLD:Prefix)&clip(FLD:Name)&'").Value'}=clip(FLD:ValueText)
  end

  WordBasic{'ActiveDocument.Fields.Update()'}
Ответить