MetaTrader 4 Client Terminal build 604 - страница 42

 
Если терминал гарантированно видит, что запущен в среде без контроля прав и у него есть полный доступ к локальной папке(это много условий, а не одно), то он хранит экспертов и настройки локально. Но часть общих данных в виде базы codebase, маркета и хелпов всегда хранится в общей папке UserData.
 
Renat:
Если терминал гарантированно видит, что запущен в среде без контроля прав и у него есть полный доступ к локальной папке(это много условий, а не одно), то он хранит экспертов и настройки локально. Но часть общих данных в виде базы codebase, маркета и хелпов всегда хранится в общей папке UserData.

Т.е. под WinXP можно гарантированно ключом "/portable" не пользоваться? Это поведение сохранится и в будущем? Если да то это уже одна хорошая новость, хотя по-прежнему хотелось бы чтобы этот ключ был в настройках МТ4 и не приходилось беспокоиться о том как был запущен терминал.
 
А какие изменения в 606?
 
Renat:
Если терминал гарантированно видит, что запущен в среде без контроля прав и у него есть полный доступ к локальной папке(это много условий, а не одно), то он хранит экспертов и настройки локально. Но часть общих данных в виде базы codebase, маркета и хелпов всегда хранится в общей папке UserData.

Всё локально, а в этом всё равно ложка дегтя...

Получается portable недоделанный... Какой в этом смысл?

 
FxRoller:
Так и есть. Проблема в том, что история загружена с 1999г. и обычные графики (не тестерные) показывают все существующие бары правильно. А в тестере независимо от выбранного интервала тестирования (пробовал разные даты и интервалы тестирования и в этом году и в прошлом году)-вылетает всегда после 1000 баров. А иногда бывает необходимо посчитать какую-нибудь МА с большим периодом, например 50-дневную SMA без использования дневного таймфрейма - на часовиках это будет 1200 периодная машка, а в тестере максимум 1000 баров...
Как так? Я не только тестирую, а оптимизирую до 5 лет включительно, правда, не на тиках, а на М1 по открытиям баров! Пишется семизначное число баров!
 
foreteller:

При добавлении эксперта у которого используется таймер EventSetTimer() отъедается примерно 8 мегабайт памяти на каждого эксперта, без EventSetTimer() где то 2.

Для чего каждому таймеру 6 мегабайт?

PS: Сравнивал в Process Explorer в подгруженных DLL разницы не заметил.

Продолжение иследования утечки памяти

билд 606 эксперт пустой

int OnInit()
  {
//--- create timer
   EventSetTimer(1);
      
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer(); // при 3 эксперементе закомментировать
      
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   
  }
//+------------------------------------------------------------------+
Память в Мегабайтах--------------------------------------------------- Private Working Virtual WS Private


ЭКСПЕРЕМЕНТ 1

10 символов ---------------------------------------------------------------56 62 214 39


ЭКСПЕРЕМЕНТ 2

10 символов с экспертом без таймера -----------------------------146 70 305 46
смена профиля на 10 символов без эксперта ---------------------57 63 215 39
закрываем все 10 окон с символами ------------------------------- 53 59 215 35


ЭКСПЕРЕМЕНТ 3

10 символов с экспертом с таймера ---------------------------------206 130 365 107
смена профиля на 10 символов без экспертом -------------------112 116 266 88

закрываем все 10 окон с символами -------------------------------- 107 113 266 88 !!!!!!!!! ПРО 54 МЕГАБАЙТА ЗАБЫЛИ

открываем профиль ТЕ ЖЕ 10 символов с эксп. с таймером --261 185 420 162
закрываем все 10 окон с символами ---------------------------------162 168 322 145 !!!!!!!!! ЕЩЕ ПРО 100 МЕГАБАЙТА ЗАБЫЛИ

 
foreteller:

Продолжение иследования утечки памяти

билд 606 эксперт пустой

Память в Мегабайтах--------------------------------------------------- Private Working Virtual WS Private


ЭКСПЕРЕМЕНТ 1

10 символов ---------------------------------------------------------------56 62 214 39


ЭКСПЕРЕМЕНТ 2

10 символов с экспертом без таймера -----------------------------146 70 305 46
смена профиля на 10 символов без эксперта ---------------------57 63 215 39
закрываем все 10 окон с символами ------------------------------- 53 59 215 35


ЭКСПЕРЕМЕНТ 3

10 символов с экспертом с таймера -------------------------------206 130 365 107
смена профиля на 10 символов без экспертом -----------------112 116 266 88

закрываем все 10 окон с символами ------------------------------ 107 113 266 88 !!!!!!!!! ПРО 54 МЕГАБАЙТА ЗАБЫЛИ

открываем профиль10 символов с экспертом с таймером --261 185 420 162
закрываем все 10 окон с символами -------------------------------162 168 322 145 !!!!!!!!! ЕЩЕ ПРО 100 МЕГАБАЙТА ЗАБЫЛИ



Когда закрываются графики, история по соответствующему символу-периоду не сразу освобождается. А некоторое время ещё хранится в памяти на тот случай, если график был закрыт по ошибке
 
stringo:
Когда закрываются графики, история по соответствующему символу-периоду не сразу освобождается. А некоторое время ещё хранится в памяти на тот случай, если график был закрыт по ошибке

Сравните ЭКСПЕРЕМЕНТ 2 и ЭКСПЕРЕМЕНТ 3 они различаются только строкой


 EventKillTimer();

но в ЭКСПЕРЕМЕНТ 2 память освободилась вся

после 10 итераций смены профиля с таймером на "закрыты все окна" память стала 372 285 526 267

 
foreteller:
Сравните ЭКСПЕРЕМЕНТ 2 и ЭКСПЕРЕМЕНТ 3 они различаются только строкой


но в ЭКСПЕРЕМЕНТ 2 память освободилась вся

Вы про кеши понятие имеете?

У терминале нет задачи во главу угла ставить экономию памяти. Во главе угла стоит быстрый доступ к рыночной информации. Поднятый инструмент попадает в кеш, досчитывается и живет там по своим правилам столько, сколько считает нужным терминал. Когда терминал решит, что историческая база явно никому не нужна, то тогда (через N минут) он ее освободит и перестанет достраивать новые бары из тиков.

Любые тесты, оценивающие память, некорректны из-за самой сути механизмов работы кешей. То, что вы вдруг посчитали таймер причиной, похоже на поиск несвязанных закономерностей.

Работу кешей исторических данных утечками памяти называть нельзя. Нет в МТ утечек, иначе бы терминал и суток не продержался, особенно на миллионной аудитории.

 

Ренат, что насчёт предложения временно прицепить к новому метаэдитору старый компилятор. ?

Есть шансы?

Портирование старого кода пошло бы веселее.

Причина обращения: