Автор Тема: Как обойти ограничение размера переменной 32767 ?  (Прочитано 1877 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Эта тема содержит сообщение, помеченное как лучший ответ. Кликните здесь для перехода к этому сообщению.

Оффлайн liond66 [?]

  • Новичок
  • *
  • Сообщений: 20
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Здравствуйте.
В справке указано, что максимальный размер переменной MAX_ENVSIZE=32767
Можно ли увеличить это значение?
Спасибо.

Русское сообщество AutoIt


Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3975
  • Репутация: 1056
    • Награды
  • Версия AutoIt: 3.3.14.0
Позвольте поинтересоваться, а где вы столкнулись с данным ограничением?

Оффлайн liond66 [?]

  • Новичок
  • *
  • Сообщений: 20

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
У меня есть довольно навороченный скрипт с циклом 3 минуты в среднем, а в нём дополнительные циклы.
На количество всех циклов назначены переменные, и значения переменных выводятся  через GUICtrlSetData в поле Input.
Через два дня работы, когда самый большой счетчик доходит до 32 тысяч плюс (точно не запомнил), скрипт вываливается с ошибкой:
Error Allocating Memory.
При этом свободной памяти 1Gb, есть файл подкачки, Windows10x86
Поиском в интернете нашёл, что одной из причин может быть слишком большое значение переменной,
и после этого в справке обнаружил подтверждение: MAX_ENVSIZE=32767
Если такое количество циклов скрипт работает, а потом вываливается, то очень похоже, что именно из-за этого.
В другой версии того-же скрипта, где по условию счётчик показывает результат в 5 раз меньше, скрипт работал неделю без проблем!
Странно, что при создании простенького счётчика, эта ошибка не возникает.
Скрипт на работе. Взможно я использую бэта версию Autoit v3.3.15.0
Спасибо.

Оффлайн Hiki [?]

  • Новичок
  • *
  • Сообщений: 27
  • Репутация: 1
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
MAX_ENVSIZE=32767 это не максимальный размер, а максимальная длина значения переменной, то есть количество знаков.
Ваш скрипт высчитывает расстояние между галактиками в миллиметрах?

Русское сообщество AutoIt

Re: Как обойти ограничение размера переменной 32767 ?
« Ответ #3 Отправлен: Март 02, 2018, 12:27:39 »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3975
  • Репутация: 1056
    • Награды
  • Версия AutoIt: 3.3.14.0
Ограничение MAX_ENVSIZE относится только к переменным окружения и не может привести к ошибке Error Allocating Memory.

Оффлайн liond66 [?]

  • Новичок
  • *
  • Сообщений: 20

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
MAX_ENVSIZE=32767 это не максимальный размер, а максимальная длина значения переменной

Я не уверен, поэтому и задал вопрос.
Тогды было-бы по английски "the maximum length of a variable value".
А в справке написано: "Maximum size for an ENV variable."

относится только к переменным окружения

Подскажите, где прочитать, что это именно так?
Спасибо.

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3975
  • Репутация: 1056
    • Награды
  • Версия AutoIt: 3.3.14.0
liond66  [?]
Цитировать
где прочитать, что это именно так
Вы это уже прочитали в справке: Maximum size for an ENV variable.
Перевод из русской справки: Максимальная длина значения переменной окружения.

Оффлайн liond66 [?]

  • Новичок
  • *
  • Сообщений: 20

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Я понял, спасибо.
Буду рад любым идеям, как продебагить имеющуюся проблему.

Русское сообщество AutoIt

Re: Как обойти ограничение размера переменной 32767 ?
« Ответ #7 Отправлен: Март 02, 2018, 14:10:46 »

Оффлайн Tempo [?]

  • Продвинутый
  • ***
  • Сообщений: 407
  • Репутация: 94
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
liond66, строковые переменные в скрипте присутствуют? Добиться ограничения в 2,147,483,647 символов куда проще особенно если скрипт постоянно в них что-то дописывает
два дня

(нажмите для показа/скрытия)
« Последнее редактирование: Март 02, 2018, 14:35:06 от Tempo »

Оффлайн liond66 [?]

  • Новичок
  • *
  • Сообщений: 20

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Нашёл интересную тему
www autoitscript com/trac/autoit/ticket/257
Любой из трех приведённых там примеров приводит к ошибке  Error Allocating Memory.
Разница только сколько памяти осталось: в первом примере ошибка возникает если остаётся  (как и у меня!) 1Gb свободной памяти.
В последнем примере ошибка возникает если остаётся 500-600Mb свободной памяти.
Я не совсем понимаю содержание статьи. Вроде это баг Autoit и этот баг решён?
Может кто-то из гуру прокоментирует смысл указанного и я получу направление для решения проблемы моего скрипта.
Спасибо.

Оффлайн hedji [?]

  • Продвинутый
  • ***
  • Сообщений: 332
  • Репутация: 60
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
liond66 выложите пример кода. Может можно сами циклы оптимизировать?

Оффлайн liond66 [?]

  • Новичок
  • *
  • Сообщений: 20

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
строковые переменные в скрипте присутствуют?
Такого нет. Но я должен проверить, чтобы быть уверенным, когда вернусь на работу.

Может можно сами циклы оптимизировать?

Оптимизировать конечно можно, но это не даёт ответ на вопрос, почему около 2-х дней скрипт бежит, совершая более 30 тыс циклов. Ну и если проблема не в счетчике, тогда я не знаю какой блок из разросшегося в 2000 строк скрипта нужно оптимизировать.
Спасибо. 

Оффлайн hedji [?]

  • Продвинутый
  • ***
  • Сообщений: 332
  • Репутация: 60
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Отключите 3 минутную задержку, чтобы пробегал 32000+ за несколько минут. При каждом проходе цикла вываливайте значения переменных в лог-файл.

Оффлайн liond66 [?]

  • Новичок
  • *
  • Сообщений: 20

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
3 минуты - это не задержка, а время выполнения работы:
запуск сторонней программы, ожидание завершения, обработка лога. :)

Оффлайн DStalker [?]

  • Я бы её, это самого... автоматизировал и зациклил
  • Новичок
  • *
  • Сообщений: 37
  • Репутация: 2
  • Пол: Мужской
  • Ботоводство+Мультибоксинг = время выспаться ;)
    • Награды
  • Версия AutoIt: 3.3.12.0
А если костыли привязать?
 В скрипте поставить таймаут на завершение в 6 утра. А,например, планировщиком задач ежедневно в 6 утра перезапускать скрипт?

Русское сообщество AutoIt

Re: Как обойти ограничение размера переменной 32767 ?
« Ответ #14 Отправлен: Март 03, 2018, 20:04:15 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
18 Ответов
10354 Просмотров
Последний ответ Май 27, 2011, 15:26:08
от RUVATA
4 Ответов
3005 Просмотров
Последний ответ Июль 18, 2010, 16:39:56
от dwerf
1 Ответов
2523 Просмотров
Последний ответ Октябрь 18, 2011, 01:33:23
от AZJIO
6 Ответов
3975 Просмотров
Последний ответ Октябрь 16, 2012, 10:53:14
от ArtInt
0 Ответов
1011 Просмотров
Последний ответ Апрель 07, 2014, 14:02:59
от Shinoby
3 Ответов
2020 Просмотров
Последний ответ Май 07, 2015, 11:45:54
от bescom
2 Ответов
959 Просмотров
Последний ответ Июль 07, 2015, 11:40:40
от Tapok
0 Ответов
668 Просмотров
Последний ответ Сентябрь 25, 2016, 12:58:08
от SNAK
2 Ответов
591 Просмотров
Последний ответ Декабрь 21, 2016, 09:35:54
от mechlab2
1 Ответов
374 Просмотров
Последний ответ Ноябрь 13, 2017, 10:30:22
от Tyr