Доброго времени.
Столкнулся с проблемой, есть скрипт, приложен ниже, скрипт для отладки, чекает объекты на пуле скринов и логирует.
'''
int min_col=1;//кол-во необходимых цветов для нахождения
int r=0; // разбежность
int color[2]; // массив под цвета
int kol[2]; // кол-во пиеселей для каждлгов цвета
int x[50], y[50]; // массив под запись координат
int k;
int n=1;
int Image[1366][768]; // массив под загрузку изображения
int x_s_map=1162;
int x_f_map=1278;
int y_s_map=592;
int y_f_map=700;
int kol_obj=0;
int kol_obj1=0;
int kol_obj2=0;
int forn1;
int forn2;
int errorevent[280];
int manyevent[280];
color[0]=16757601; color[1]=0;//заполенние массива
kol[0]=10; kol[1]=5;//Тут сколько должно совпасть пикселей для каждого цвета
loop(270)
{
sleep(10);
loadimage (#Image[0][0], "C:\screenDDR\12.12.24\screen12.12.24."+format(n)+".bmp");
k=findheapcolor(20, #color[0], #kol[0], 1, min_col, #x[0], #y[0], 15, 15, 20, 20, x_s_map, y_s_map, x_f_map, y_f_map, r, r, r, r, r, r, #Image[0][0]);
if (k==1)
{
kol_obj++;
}
if (k<1)
{
kol_obj1++;
errorevent[kol_obj1]=n;
}
if (k>1)
{
kol_obj2++;
manyevent[kol_obj2]=n;
}
n++;
}
messagebox (format(kol_obj)+" найдено объектов");
messagebox (format(kol_obj1)+" не найдено объектов");
messagebox (format(kol_obj2)+" найдено множества объектов");
for (forn1=0; forn1<kol_obj1; forn1++)
{
messagebox (format(errorevent[forn1])+" скриншот с ошибкой поиска");
}
for (forn2=0; forn2<kol_obj2; forn2++)
{
messagebox (format(errorevent[forn1])+" скриншот с множеством объектов");
}
'''
Поведение кибора:
1. Первый запуск.
1.1. Потребление 55мб вырастает до 1гб.
1.2 Скрипт отрабатывает успешно.
2. Второй запуск.
2.1. Потребление 1гб вырастает до 1.6гб (предполагаю - это крит)
2.2. Взлетает диалоговое окно Image file conversion error
2.2.1 Если прокликивать, окно то необходимо прокликать то кол-во раз, сколько цикл не смог отработать.
2.2.2 При остановке скрипта кибор не падает, но при дальнейших стартах продолжает выдавать ошибку.
2.2.3 При нажатии на любое действие в шапке окна программы кибор, кибор рассыпается.
Играл с операторами new и delete, результат 0
1. wotres2 - 13 Декабря, 2024 - 03:59:47 - перейти к сообщению
2. Kibor - 13 Декабря, 2024 - 04:02:39 - перейти к сообщению
loadimage вынесите вверх скрипта. Он отработать один раз должен
3. wotres2 - 13 Декабря, 2024 - 04:11:27 - перейти к сообщению
Kibor пишет:
loadimage вынесите вверх скрипта. Он отработать один раз должен
Это разрушит логику скрипта, в цикле меняется имя подгружаемой картинки, чтобы пройтись по 270 разным изображениям
я почему то подумал, что данная функция обращаясь к одному массиву должна использовать и перезаписывать одну и туже область выделенной памяти, но как итог он вгружает всё.
Подскажите, как правильно реализовать этот функционал, чтобы не возникло проблем на парсинге 1000 изображений?
4. Zireael - 13 Декабря, 2024 - 04:26:05 - перейти к сообщению
Цитата:
loadimage вынесите вверх скрипта. Он отработать один раз должен
Сомневаюсь что в этом проблема. Это же не база символов, которая постоянно дополняется.
Цитата:
int Image[1366][768]; // массив под загрузку изображения
Все изображения меньшего размера? Может какое-то больше и не помещается в массив.
Добавьте после loadimage:
CODE:
messagebox(n);
После загрузки какого изображения появляется ошибка?
5. wotres2 - 13 Декабря, 2024 - 04:31:40 - перейти к сообщению
Zireael пишет:
Цитата:
loadimage вынесите вверх скрипта. Он отработать один раз должен
Сомневаюсь что в этом проблема. Это же не база символов, которая постоянно дополняется.
Цитата:
int Image[1366][768]; // массив под загрузку изображения
Все изображения меньшего размера? Может какое-то больше и не помещается в массив.
Добавьте после loadimage:
CODE:
messagebox(n);
После загрузки какого изображения появляется ошибка?
Уточню: наблюдаю это со вчера, собственно когда скрипт и собрал
Повторюсь:
1. При первом запуске скрипта после запуска программы ошибок НЕТ.
2. При повторном запуске скрипта в той же сессии программы ошибка не на конкретном изображении, а при условии, что процесс Кибор превысил потребление памяти 1500 мб.
3. Т.е. при третьем запуске скрипта, Потребление памяти не меняется и сразу появляется ошибка "Image file conversion error"
После перезапуска программы - всё заново по пунктам)
6. Zireael - 13 Декабря, 2024 - 04:44:28 - перейти к сообщению
Описывать одно и тоже несколько раз смысла нет.
Потребление памяти до 1.5 гб, такого не должно быть.
Я написал с чего начать поиск проблемы.
Также можно убрать из скрипта часть кода и посмотреть в какой момент пропадёт ошибка.
Потребление памяти до 1.5 гб, такого не должно быть.
Я написал с чего начать поиск проблемы.
Также можно убрать из скрипта часть кода и посмотреть в какой момент пропадёт ошибка.
7. wotres2 - 13 Декабря, 2024 - 04:59:37 - перейти к сообщению
Zireael пишет:
Описывать одно и тоже несколько раз смысла нет.
Потребление памяти до 1.5 гб, такого не должно быть.
Я написал с чего начать поиск проблемы.
Также можно убрать из скрипта часть кода и посмотреть в какой момент пропадёт ошибка.
Потребление памяти до 1.5 гб, такого не должно быть.
Я написал с чего начать поиск проблемы.
Также можно убрать из скрипта часть кода и посмотреть в какой момент пропадёт ошибка.
Доубирал код до вида:
int n=1;
int Image[1367][769]; // массив под загрузку изображения
loadimage (#Image[0][0], "C:\screenDDR\12.12.24\screen12.12.24."+format(n)+".bmp"
Итог - то же поведение, только малыми шагами, при каждом запуске кипод догружает в себя по 4 мб (и не отпускает) и так растет в потреблении при каждом запуске, не хочу 500 раз запускать скрипт чтобы довести до критической отметки в потреблении памяти.
Думаю можно успокоиться и смириться с фатом такого функционала)
8. Zireael - 13 Декабря, 2024 - 05:10:47 - перейти к сообщению
Тогда только ждать исправления бага.
9. Kibor - 13 Декабря, 2024 - 07:51:17 - перейти к сообщению
Исправил.