Как уменьшить тормоза MT4 под VPS? - страница 3

 
Как уже писали выше, обратите пристальное внимание на минимизацию графических изменений и отрисовок.

VPS хостятся на серверных платформах, где видеоподсистемы самого архаичного уровня. Разница в отображении даже 2D графики по сравнению с десктопами может достигать десятков раз. То, что на десктопе не чувствуются реальные апдейты по 50 FPS на чартах, на серверных виртуалках приводит к тормозам.

Более понятный пример: запустите графическую игрушку на VPS и сразу все станет ясно. По сути терминал является аналогом полноценной графической игрушки, причем у терминала FPS может меняться в очень широких пределах вплоть до 300-500 FPS. Иногда можно сидеть с 5 FPS на спокойном рынке, где частота отрисовок пропорциональна тикам, а иногда убиваться от громадного потока обновлений при активном рынке.

Причем терминал достаточно эффективно буферизует отрисовку и не ведет принцип "1 тик = 1 рефреш" на больших потоках. Но если на чарте эксперт самостоятельно занимается активным перестроением графики и постоянно перерисовывает чарт, то он легко пробивает штатную ситему разумных обновлений (например, работающей до 50 FPS) и разгоняет ее до сотен FPS, что и убивает.

Широкая вариабельность нагрузки на графическую часть создает впечатление, что у одного человека все летает, а у другого - тормозит, что "в прошлом билде все летало". Пользователи часто не задумываются, что некотрые эксперты легко меняют нагрузку на терминал в разы и десятки раз, что из-за разницы производительности графических карт(а именно их 2D функции активно используются) приводит к тормозам.
 

Спасибо за разъяснения. Возможно, стоит подумать в сторону ввода ограничения в терминале RefreshScreen специально для VPS-вариантов использования.

Но есть некоторые сомнения:

чарты использую на весь экран терминала (максимизация окна), т.е. другие чарты не отрисовываются. Когда ставлю onTop чарт без обновления, то GUI все равно тормозит. Не в курсе, как реализовано. Может быть, что отрисовка в терминале идет и на перекрытых (не видно их) полностью чартах. Если так, то это с первого взгляда видится не совсем верным.

P.S. Заменю везде Comment на это:

void CommentVPS( string Str, int Pause = 1000 )
{
  static int PrevTime = 0;
  int CurrTime = GetTickCount();
  
  if (CurrTime - PrevTime > Pause) // специально упустил MathAbs на случай ((PrevTime == 0) && (CurrTime < 0)) == TRUE.
  {
    Comment(Str);
    
    PrevTime = CurrTime;
  }
 
  return;
}
 
Даже перекрытые окна отрисовываются. У них экономия происходит только на финальном этапе, когда операционка решает - выводить или нет битмап на чарт.

В принципе, мы можем отключить отрисовку полностью скрытых окон, что даст огромную экономию. Будем думать над этим, затея стоящая.
 
Renat:
Даже перекрытые окна отрисовываются. У них экономия происходит только на финальном этапе, когда операционка решает - выводить или нет битмап на чарт.

В принципе, мы можем отключить отрисовку полностью скрытых окон, что даст огромную экономию. Будем думать над этим, затея стоящая.
  Главное при этом не "выплеснуть младенца" и не получить новые баги в виде невозможности получить адекватные данные из неактивного окна.
 
Renat:
Даже перекрытые окна отрисовываются. У них экономия происходит только на финальном этапе, когда операционка решает - выводить или нет битмап на чарт.

В принципе, мы можем отключить отрисовку полностью скрытых окон, что даст огромную экономию. Будем думать над этим, затея стоящая.
Было бы неплохо ещё возможность определить, скрыто ли окно того или иного графика. Появилась необходимость.
 
hrenfx:

Спасибо за разъяснения. Возможно, стоит подумать в сторону ввода ограничения в терминале RefreshScreen специально для VPS-вариантов использования.

Но есть некоторые сомнения:

чарты использую на весь экран терминала (максимизация окна), т.е. другие чарты не отрисовываются. Когда ставлю onTop чарт без обновления, то GUI все равно тормозит. Не в курсе, как реализовано. Может быть, что отрисовка в терминале идет и на перекрытых (не видно их) полностью чартах. Если так, то это с первого взгляда видится не совсем верным.

P.S. Заменю везде Comment на это:

  Я бы сделал немного по другому собрать все строки комментов и выводить все скопом:

 

void CommentVPS( string Str, int Pause = 1000 )
{
  static int PrevTime = 0;
  static string txt = "";
  int CurrTime = GetTickCount();
  txt = txt + Str + "\n";
  if (CurrTime - PrevTime > Pause)
  {
    Comment(txt);
    txt = "";
    PrevTime = CurrTime;
  }
 
  return;
}
 
tol64:
Было бы неплохо ещё возможность определить, скрыто ли окно того или иного графика. Появилась необходимость.
  Проверяется через довольно легко ВИНАПИ. если надо - поищу код.
 
Статус видимости окна тоже хорошая идея, это даст новые возможности экономии в экспертах.

Надо добавить.
 
Renat:
Статус видимости окна тоже хорошая идея, это даст новые возможности экономии в экспертах.

Надо добавить.

  Ого, вот это новость +100 !!!

  Прям не знаю чего бы еще попросить....  Все идеи разбежались :) 

 
FAQ:

 Я бы сделал немного по другому собрать все строки комментов и выводить все скопом:

Да, зависит от цели. Не могу себе этого позволить, т.к. иногда многострочные вещи выводятся за один присест (пример).
Причина обращения: