Я не разработчик, но...
1) Как работает ArrayResize - выделяется память именно сколько
запрашивается, или с запасом, чтобы при следующем выполнении не
отрабатывалась дорогая операция allocate memory. Так делается в
библиотеках C/C++.
Мне надо выполнять ArrayResize при каждом добавлении сигнала.
КАК
это устроено - сказать точно не могу, но это реально затратная по времени
операция. Так что похоже, что делается так, как вы предположили.Мне надо выполнять ArrayResize при каждом добавлении сигнала.
2) В доке сказано, что время выполнения deinit в эксперте ограничено 2.5
сек. Реально время таково? Обойти это никак? Как проверить в коде при
следующем init, что deinit был прерван по таймауту?
Через GV? Ну, например, в конце deinit выставляете флаг в GV.
3) Как при тестировании замерить время выполнения участка кода? Я не
нашёл ни одной функции, выдающей текущее время в момент выполнения
функции, а не время запуска эксперта или эмуляция времени тика.
GetTickCount(
) никак не подходит?
2) зациклить скрипт или советник и потом грохнуть его вручную и посмотреть причину деинициализации
По 3 вопросу . А как Вы это сделали бы в С++. Точно также и здесь.
По поводу GetTickCount( ) эта функция считает по 1мс,но надо не забывать, что время тактирования от 10 до 30 мс. Поэтому время выполнения коротких программ им замерять нельзя.
Для более точного замера я использовал QueryPerformanceFrequency и её пару QueryPerformanceCounter,засечь можно единицы тактов процессора. Лучшего нет.
По поводу GetTickCount( ) эта функция считает по 1мс,но надо не забывать, что время тактирования от 10 до 30 мс. Поэтому время выполнения коротких программ им замерять нельзя.
Для более точного замера я использовал QueryPerformanceFrequency и её пару QueryPerformanceCounter,засечь можно единицы тактов процессора. Лучшего нет.
1) Замерил пару ArrayResize (одномерный + двумерный 128 столбцов), при последовательном добавлении по 1 строке время плавно растёт с 0 мс до 7 мс на 3000й строке. При выделении сразу по 4000 строк время 6 мс. Похоже разработчики не реализовали стандартный сишный ход с выделением памяти блочно с запасом. Придётся самому.
2) Зацикленный код в deinit не прерывается по таймауту ни при тестировании, ни при оптимизации. Висит, пока не нажмёшь Stop. Меня это устраивает.
UnitializeReason в последующем init не возвращает ничего кроме 0.
GV - хорошая идея, спасибо. Она бы пригодилась, если бы срабатывал таймаут.
3) GetTickCount( ) прекрасно подходит, спасибо (надо бы её добавить в раздел функций времени, там ей место). Точнее мне не надо.
PS: терминал запускается в wine (linux), возможно в этом причина недокументированного поведения. Кто-нибудь бы проверил в винде
int start = GetTickCount();
n = 0;
while (n == 0)
PrintDebug(0, "deinit (ms) = " + (GetTickCount() - start));
Сразу будет видно время таймаута (если есть).
И выдаёт ли UnitializeReason код ошибки при последующем init (какие по таймауту и по кнопке Stop).
2) Зацикленный код в deinit не прерывается по таймауту ни при тестировании, ни при оптимизации. Висит, пока не нажмёшь Stop. Меня это устраивает.
UnitializeReason в последующем init не возвращает ничего кроме 0.
GV - хорошая идея, спасибо. Она бы пригодилась, если бы срабатывал таймаут.
3) GetTickCount( ) прекрасно подходит, спасибо (надо бы её добавить в раздел функций времени, там ей место). Точнее мне не надо.
PS: терминал запускается в wine (linux), возможно в этом причина недокументированного поведения. Кто-нибудь бы проверил в винде
int start = GetTickCount();
n = 0;
while (n == 0)
PrintDebug(0, "deinit (ms) = " + (GetTickCount() - start));
Сразу будет видно время таймаута (если есть).
И выдаёт ли UnitializeReason код ошибки при последующем init (какие по таймауту и по кнопке Stop).
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
1) Как работает ArrayResize - выделяется память именно сколько запрашивается, или с запасом, чтобы при следующем выполнении не отрабатывалась дорогая операция allocate memory. Так делается в библиотеках C/C++.
Мне надо выполнять ArrayResize при каждом добавлении сигнала.
2) В доке сказано, что время выполнения deinit в эксперте ограничено 2.5 сек. Реально время таково? Обойти это никак? Как проверить в коде при следующем init, что deinit был прерван по таймауту?
3) Как при тестировании замерить время выполнения участка кода? Я не нашёл ни одной функции, выдающей текущее время в момент выполнения функции, а не время запуска эксперта или эмуляция времени тика.