Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Удобнее торговать с помощью смартфона? Мобильная версия MetaTrader 5 тебе подойдет!
Forex Trader
114255
Forex Trader 2007.03.07 15:48 
Скрипт с кодом, подобным:

while (!IsStopped()) {
string s = "notfunny";
for (int j = 0; j<1000; j++) {
bool q = (StringSubstr("leak",1)==s || s == "terrible");
}
Sleep(10);
}

вызывает утечку памяти в совершенно гигантских масштабах (мегабайты в секунду).
Forex Trader
114255
Forex Trader 2007.03.07 16:00  
А так ?
bool q;
while (!IsStopped()) {
string s = "notfunny";
for (int j = 0; j<1000; j++) {
q = (StringSubstr("leak",1)==s || s == "terrible");
}
Sleep(10);
}
Forex Trader
114255
Forex Trader 2007.03.07 16:25  
И так течет (собственно, обратное было бы странно - от области видимости такие вещи зависеть не должны)

Дело где-то в самом выражении, первоначально это был if, т.е можно заменить на
if (blah-blah) dumb_var = 1; и все равно будет. Зато удаление части после || утечку прекращает.

А у вас не течет разве? Это пропустить невозможно, в банальном списке процессов заметно сразу.
Forex Trader
114255
Forex Trader 2007.03.07 16:55  
Есть такое дело. Спасибо за находку. Слава разбирается.
Forex Trader
114255
Forex Trader 2007.03.07 17:29  
Спасибо. Нашли ошибку в кодогенераторе. В ближайшее время будет исправление
Forex Trader
114255
Forex Trader 2007.03.07 17:55  
Вот и замечательно, вам спасибо ).
Forex Trader
114255
Forex Trader 2007.03.07 19:14  
Может быть, из-за этой ошибки появлялось сообщение:
2007.02.27 10:24:00 Memory handler: cannot allocate 2088773164 bytes of memory
?

И индикатор с таким сообщением не работает. Это уже обсуждалось в другой ветке.

В индикаторе много сложных булевых выражений.
Forex Trader
114255
Forex Trader 2007.03.07 21:38  
Что касается приведенного мной случая, там память течет все же не гигабайтами, хотя и неостановимо )). Данный кусок кода использовался в цикле удаления объектов (которых у меня на графике много), а индикатор с этим кодом был безостановочно обновляем автообновлялкой. Т.е. проходов много. Посему эффект и проявился - когда mt зажрал 1.2G, я увидел подтормаживание и подумал, что дело нечисто )). В секунду приведенный пример жрет килобайт сто, условно 50 проходов в секунду по тысяче в цикле:

Т.е. одно использование сложного выражения жрет несколько байт.

Так что имеет смысл оценить тот ваш индикатор с этой точки зрения. За секунду он 2G не должен израсходовать (если бесконечных циклов нет). Хотя, конечно, чем черт не шутит.
Forex Trader
114255
Forex Trader 2007.03.07 21:41  
Что касается приведенного мной случая, там память течет все же не гигабайтами, хотя и неостановимо )). Данный кусок кода использовался в цикле удаления объектов (которых у меня на графике много), а индикатор с этим кодом был безостановочно обновляем автообновлялкой. Т.е. проходов много. Посему эффект и проявился - когда mt зажрал 1.2G, я увидел подтормаживание и подумал, что дело нечисто )). В секунду приведенный пример жрет килобайт сто, условно 50 проходов в секунду по тысяче в цикле:

Т.е. одно использование сложного выражения жрет несколько байт.

Так что имеет смысл оценить тот ваш индикатор с этой точки зрения. За секунду он 2G не должен израсходовать (если бесконечных циклов нет). Хотя, конечно, чем черт не шутит.


P.S. - в несколько иных условиях оно жрало пару мегов в секунду - но в любом случае, имеет смысл посмотреть на расходуемую память в процессах - процесс зажирания будет виден, мгновенно это случиться не должно.
Forex Trader
114255
Forex Trader 2007.03.08 10:36  
Попробуйте ограничить количество баров на графиках
Forex Trader
114255
Forex Trader 2007.03.08 13:55  
Попробуйте ограничить количество баров на графиках
И 500 баров не помогает. Это уже обсуждалось в соседней ветке. Причем очень фигуристо эта ошибка проявляется. Во первых, не у всех. Во вторых, очень избирательно.

Вот цитаты:

name='Heinz Atkins' date='21.1.2007, 1:08' post='153586']
Я решил проблему с памятью путём замены ilowest на lowest, ihighest на highest. Всвязи с этим у меня вопрос: сильно ли скажется это на функциональной работе zup_55? Применил к графику, вроде всё работает.


name='Heinz Atkins' date='21.1.2007, 14:02' post='153635']
Вчера убил целый день на решение этой проблемы. Я установил 197 билд, заменил функции, скомпилировал, вывел на график, сделал апдейт до 201. Всё заработало. Потом пробовал заменить уже на работающем zup_55 функции снова на iLowest итд...
Как только скомпилировал zup_55 перестал работать в експертах и журналах писал - Memory handler: cannot allocate 2 088 773 148 bytes of memory. Я плохо разбираюсь в коде, но я думаю причастность функций iHighest и iLowest к проблемам с памятью доказана. С регистром и количеством баров в окне и в истории это точно не связано. Я думаю всем тем кто столкнулся с этой проблемой стоит прочитать это сообщение.


name='Heinz Atkins' date='21.1.2007, 15:41' post='153648']
Да, были проблемы и до iLowest..., но мы их по-моему решили с помощью старого билда? У меня например сейчас в папке лежат три ZUP 55 54 53. Если сейчас я положу туда 52, то он не заработает, поскольку я его не компилировал на 197 и не применял к графику до апдейта. Вообщем еще стоит поразбираться в этой проблеме. В любом случае для себя я всё решил, проблема памяти не беспокоит.


name='Yoda_2' date='23.1.2007, 16:15' post='154460']
Что-то индиктор Zup_v55 не присоединяется к графику, все другие присоединились нормально.
В журнале пишит - Memory handler: cannot allocate 2 088 773 148 bytes of memory
Что делать?


name='VEKTOR' date='24.1.2007, 21:07' post='155390']
Загрузил ZUP-v56 в 198 билд, в Мето Едиторе исправил 2 iHighest и 2 iLowest .[color=#FF0000]201 билд не обновлял[/color].56 заработал , 54 и 55 ТОЖЕ,обновил 201 билд все работает
Спасибо ВСЕМ!



name='NemoL' date='27.2.2007, 11:43' post='173734']
Доброе время суток всем!

Ну вот и у меня вылезло...
2007.02.27 10:24:00 Memory handler: cannot allocate 2088773164 bytes of memory

ZUP_v59 :unsure: , предыдущие работают (те которые ставил - 47, 54, 58 ^secret^ )

Колличество баров, выводимых в окно, уменьшил до 500.
Ставил старый bild (сейчас 202 от MetaQuotes), поставил 201 от Straighthold - ничего. Закачал котировки поновой - пусто.

Может кто чего посоветует ещё, как убрать это противное "Memory handler"???

Вечером попробую на работе закинуть 59-й, на другой комп, если пойдет...
Тогда FORMAT C:\ :blink:

Всем удачи! :big_boss:


name='NemoL' date='28.2.2007, 11:26' post='174418']
name='поручик' post='174037' date='27.2.2007, 18:32']
NemoL, пробуй МТ от разных ДЦ. У меня 51 на 197 Альпари и 56 на 202 Лайта. Более поздние не встают :(

У меня 202 MT, инсталяшка от MetaQuotes, но настроен на работу с Лайтом, на работе тоже самое. Дома работают несколько ZUPов - до 59-й версии. Вчера вечером закинул ZUP_59 на рабочий комп и просто запустил MT, работает без проблем. Хотя там была проблема с 54-м, тоже "...Memory handler...", как я её решил - писал выше. Но дома ни в какую :(((
Ну да ладно, особо пока не напрягает, хватает предыдущих версий. Когда напряжет - format C:\
хотя Maksas в первых постах писал об этом, что перестановка системы непомогла.

Некоторое время назад, еще до знакомства с ZUP NENa, я переделывал какой то индикатор из MetaStocka на MQL4. И время от времени при его запуске, в буферы индюка записывались очень огромные значения, откуда это вылазило так и непонял, код то был простой, индикатор отображался и погоняв таймфреймы туда сюда несколько раз, значения приходили в норму. Это я к чему, может и эдесь такая же чехарда вылазит.

Вопрос к NENu ^scenic^
Как Вы думаете, такая ситуация возможна? Что при некотором стечении неблагоприятных ситуаций при работе MetaTrader & MetaEditor & MQL4 (+солнечная активность... :))) и т.д. и т.п.) во время выполнения кода индикатора, в некоторую ячейку памяти, переменную, или может буфер, то что первично и важно для дальнейших расчетов, записывается мусор (огромное число), или наоборот - мусор остаётся, неудаляется, или нужное значение незаписывается. И ZUP при дальнейших расчётах берёт это неправильное число и вываливается с ошибкой.
Memory handler: cannot allocate 2088773164 bytes of memory

На разных компах не может быть одинаковое сообщение! И что это такое? немогу распределить 2 гига памяти???
2007.02.28 09:21:26 ZUP_v59 USDJPY,H4: not enough memory for stack (2088773164 bytes)
А это что за билиберда? недостаточно памяти под стек???
Нет, это всё происки ошибок MT4!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Хотя всё это только мои мысли и может быть неправильные.

Всем удачи :big_boss:


name='NemoL' date='1.3.2007, 10:14' post='174962']
Скопировал всю папку MetaTrader4, с компа на котором ZUP59 неработает. На рабочем компе удалил МТ недеинсталируя, записал на это место копию МТ с компа на котором ZUP59 неработал. Запустил - всё работает!
Скопировал всю папку MetaTrader4, с компа на катором ZUP59 работает. На домашнем компе удалил МТ и на это место записал копию с рабочего компа. Запустил - всё работает!

Потом вернул всё как было - неработает!

Работаю с рабочей версией.

Всем удачи :big_boss:


Это только часть. Обращались здесь, на форуме, с этой проблемой. Но глухая стена. Люди мучаются и сами кто что найдет. Но у всех однозначное мнение. Проблема появилась после 199 билда метатрейдера. И, соответственно, проблема из-за метатрейдера.

У большинства работает нормально. У меня ни разу такой проблемы не было.

Код индикатора здесь физически не поместится. Более 5000 строк. На Ониксе можно скачать любую версию в архивах
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий