Kibor |
Отправлено: 19 Июля, 2015 - 10:29:56
|
Эксперт
Просматривает форум
Сообщений всего: 8218
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Может быть... Кибор прожерлив, за то потом быстро отрабатывает.
такой код собранный в exe с запакованным в него рисунком в ресурсы размером 132 114 ест 36 метров оперативки..
CODE:int Image_0[132][114];
int PosX_0[512];int PosY_0[512];
if (unpack("C:\Image_0.bmp", tempfolder()+"images.bmp", 1)>-1)
{
loadimage (#Image_0[0][0], tempfolder()+"images.bmp");
}
messagebox (findimage(-1, #Image_0[0][0], 0, #PosX_0[0], #PosY_0[0], 0, 0, 217, 402, -1));
RESOURCE
{
"C:\Image_0.bmp";
}
Такой (примерно 300 строк) в EXE ест 293 метра
CODE://Это вверху скрипта
char s[10000], p[1000], file[10000];
int size_file=0, sizf, t_content_length, ot;
string otvet;//сюда капча пишется
/*
//так делать скрин капчи и сохранить на комп как JPG
int Image_0[500][500];
screen(#Image_0[0][0], 2, 2, 100, 100, -1);
saveimage (JPG, #Image_0[0][0], "C:\12345.jpg");
*/
//Это использование
/*
capcha(
Указатель на string в который запишется отгаданная капча
путь к файлу .jpg с капчей на компьютере
свой ключ в системе antigate.com
время в сек. между запросами готового результата
время в сек сколько ждать результата
)
Возвращает 1 если разгадана. 0 если не разгадана
*/
ot=capcha(#otvet, "C:\12345.jpg", "tyt_vvesti_svoi_kluch_v_sisteme_antigate", 5, 120);
//если ot равно 1 - значит разгадана. капча в otvet
//если 0 - значит ошибка. Код и описание ошибки в otvet
messagebox (otvet);//выводит или капчу или ошибку
//Это вниз скрипта
function capcha(string #otvet, string pyt, string k, int t, int wtt)
{
if (capchasave(#otvet, k, pyt)==1)
{
t=t*1000;
wtt=wtt*1000;
int wtt1=gettime();
ss: if (opensocket ("antigate.com", 80)==1)//Если открыли сокет
{
//otvet="122976708";
strcpy(#s[0], "GET http:/"+"/antigate.com/res.php?key="+k+"&action=get&id="+otvet+" HTTP/1.0");//Формируем GET запрос
sizf=size(#s[0]);//Узнаем номер в массиве конца строки с GET запросом
//Записываем \r\n\r\n - конец заголовка
s[sizf]=formatic(13);s[sizf+1]=formatic(10);s[sizf+2]=formatic(13);s[sizf+3]=formatic(10);s[sizf+4]=formatic(0);
//messagebox (format(#s[0]));//Воспроизводим
if (sendhtml(#s[0], sizf+4)>0)//Если отправили запрос
{
for (int ns=0; ns<999; ns++)p[ns]=formatic(0);
recvhtml(#p[0], 999);//читаем ответ
//messagebox (format(#p[0]));//Воспроизводим
if (format(#p[0])=="")
{
if (gettime()-wtt1>wtt)
{
otvet="ERROR. Время ожидания прошло. Ваш ID "+formatic(13)+formatic(10)+otvet;
closesocket ();//Закрываем
return 0;
}
pause(t);
closesocket ();//Закрываем
goto ss;
}
/////////////
if (p[9]=='2' && p[10]=='0' && && p[11]=='0' && && p[13]=='O' && && p[14]=='K')//1
{
for (int n=0; n<990; n++)//2
{
if (p[n]==formatic(13)&&p[n+1]==formatic(10)&&p[n+2]==formatic(13)&&p[n+3]==formatic(10))//3
{
for (int n1=n+4; n1<990; n1++)//4
{
if (p[n1]=='O'&&p[n1+1]=='K'&&p[n1+2]=='|')//5
{
otvet="";
for (int n2=n1+3; n2<990; n2++)//6
{
if (p[n2]==formatic(13))//7
{
closesocket ();//Закрываем
return 1;
}//7
otvet=otvet+p[n2];
}//6
//otvet="Ошибка нахождения спец символов после заголовка. Ваша капча "+formatic(13)+formatic(10)+otvet;
closesocket ();//Закрываем
return 1;
}//5
if (p[n1]=='C'&&p[n1+1]=='A'&&p[n1+2]=='P'&&p[n1+3]=='C'&&p[n1+4]=='H'&&p[n1+5]=='A'&&p[n1+6]=='_'&&p[n1+7]=='N'&&p[n1+8]=='O'
&&p[n1+9]=='T'&&p[n1+10]=='_'&&p[n1+11]=='R'&&p[n1+12]=='E'&&p[n1+13]=='A'&&p[n1+14]=='D'&&p[n1+15]=='Y')
{
if (gettime()-wtt1>wtt)
{
otvet="ERROR. Время ожидания прошло. Ваш ID "+formatic(13)+formatic(10)+otvet;
closesocket ();//Закрываем
return 0;
}
pause(t);
closesocket ();//Закрываем
goto ss;
}
}//4
for (n1=n+4; n1<990; n1++)//8
{
if (p[n1]=='E'&&p[n1+1]=='R'&&p[n1+2]=='R'&&p[n1+3]=='O'&&p[n1+4]=='R')//9
{
otvet="";
for (n2=n1; n2<990; n2++)//10
{
if (p[n2]==formatic(13))//11
{
closesocket ();//Закрываем
return 0;
}//11
otvet=otvet+p[n2];
}//10
}//9
}//8
return 0;
}//3
}//2
closesocket ();//Закрываем
otvet="ERROR. Ошибка нахождения спец символов после заголовка Ваш ID "+formatic(13)+formatic(10)+otvet;
return 0;
}//1
closesocket ();//Закрываем
otvet="ERROR. Ошибка подключения к сервесу. Не вернул OK 200 Ваш ID "+formatic(13)+formatic(10)+otvet;
return 0;
}
if (gettime()-wtt1>wtt)
{
closesocket ();//Закрываем
otvet="ERROR. Время ожидания прошло. Не удалось отправить запрос Ваш ID "+formatic(13)+formatic(10)+otvet;
return 0;
}
pause(t);
closesocket ();//Закрываем
goto ss;
}
if (gettime()-wtt1>wtt)
{
otvet="ERROR. Время ожидания прошло. Не удалось открыть сокет. Ваш ID "+formatic(13)+formatic(10)+otvet;
return 0;
}
pause(t);
goto ss;
}
else return 0;
}
function capchasave(string #otvet, string id, string pyt)
{
otvet="";
if (opensocket ("antigate.com", 80)==1)//Если открыли сокет
{
read_file(pyt);
strcpy(#s[0], "POST /in.php HTTP/1.1");//Формируем POST запрос
savegetpost(#s[0], 1);
strcpy(#s[0], format(#s[0])+"Host: antigate.com");//Формируем POST запрос
savegetpost(#s[0], 1);
strcpy(#s[0],format(#s[0])+"Content-Type: multipart/form-data;");//Формируем POST запрос
savegetpost(#s[0], 0);
strcpy(#s[0], format(#s[0])+" boundary=kibor-post");//Формируем POST запрос
savegetpost(#s[0], 1);
strcpy(#s[0], format(#s[0])+"Content-Length: 0000000000" );//Формируем POST запрос
savegetpost(#s[0], 2);
t_content_length=sizf;
strcpy(#s[0], format(#s[0])+"--kibor-post" );//Формируем POST запрос
savegetpost(#s[0], 1);
strcpy(#s[0], format(#s[0])+"Content-Disposition: form-data; name="+formatic(34)+"method"+formatic(34));//Формируем POST запрос
savegetpost(#s[0], 2);
strcpy(#s[0], format(#s[0])+"post" );//Формируем POST запрос
savegetpost(#s[0], 1);
strcpy(#s[0], format(#s[0])+"--kibor-post" );//Формируем POST запрос
savegetpost(#s[0], 1);
strcpy(#s[0], format(#s[0])+"Content-Disposition: form-data; name="+formatic(34)+"key"+formatic(34));//Формируем POST запрос
savegetpost(#s[0], 2);
strcpy(#s[0],format(#s[0])+id);//Формируем POST запрос
savegetpost(#s[0], 1);
strcpy(#s[0], format(#s[0])+"--kibor-post" );//Формируем POST запрос
savegetpost(#s[0], 1);
strcpy(#s[0], format(#s[0])+"Content-Disposition: form-data; name=");//Формируем POST запрос
strcpy(#s[0], format(#s[0])+formatic(34)+"file"+formatic(34)+"; filename="+formatic(34)+"12345.jpg"+formatic(34) );//Формируем POST запрос
savegetpost(#s[0], 1);
strcpy(#s[0], format(#s[0])+"Content-Type: image/jpeg");//Формируем POST запрос
savegetpost(#s[0], 2);
sizf=size(#s[0]);//Узнаем номер в массиве конца строки с POST запросом
for (int n=0; n < size_file; n++)s[sizf+n]=file[n];
sizf=sizf+size_file;
s[sizf]=formatic(13);s[sizf+1]=formatic(10);s[sizf+2]=formatic(0);
sizf=sizf+2;
s[sizf]='-'; sizf++; s[sizf]='-'; sizf++; s[sizf]='k'; sizf++; s[sizf]='i'; sizf++; s[sizf]='b'; sizf++;
s[sizf]='o'; sizf++; s[sizf]='r'; sizf++; s[sizf]='-'; sizf++; s[sizf]='p'; sizf++; s[sizf]='o'; sizf++;
s[sizf]='s'; sizf++; s[sizf]='t'; sizf++; s[sizf]='-'; sizf++; s[sizf]='-'; sizf++;
s[sizf]=formatic(13);s[sizf+1]=formatic(10);s[sizf+2]=formatic(0);
sizf=sizf+2;
save_content_length();
//messagebox (format(#s[0]));//Воспроизводим что отправляем
/*
if (fopen ("C:\543215.txt", "wb")!=0)
{
//записать в файл что отправляем
fwriteb(#s[0], sizf);//Запись по указателю на масив char
fclose();
}
*/
if (sendhtml(#s[0], sizf)>0)//Если отправили запрос
{
recvhtml(#p[0], 999);//читаем ответ
//messagebox (format(#p[0]));//Воспроизводим ответ
if (p[9]=='2' && p[10]=='0' && && p[11]=='0' && && p[13]=='O' && && p[14]=='K')
{
for (int n=0; n<990; n++)
{
if (p[n]==formatic(13)&&p[n+1]==formatic(10)&&p[n+2]==formatic(13)&&p[n+3]==formatic(10))
{
for (int n1=n+4; n1<990; n1++)
{
if (p[n1]=='O'&&p[n1+1]=='K'&&p[n1+2]=='|')
{
for (int n2=n1+3; n2<990; n2++)
{
if (p[n2]==formatic(13))
{
closesocket ();//Закрываем
return 1;
}
otvet=otvet+p[n2];
}
closesocket ();//Закрываем
otvet="ERROR. Ошибка нахождения спец символов после заголовка. Ваш ID "+formatic(13)+formatic(10)+otvet;
return 0;
}
}
for (n1=n+4; n1<990; n1++)
{
if (p[n1]=='E'&&p[n1+1]=='R'&&p[n1+2]=='R'&&p[n1+3]=='O'&&p[n1+4]=='R')
{
for (n2=n1; n2<990; n2++)
{
if (p[n2]==formatic(13))
{
closesocket ();//Закрываем
return 0;
}
otvet=otvet+p[n2];
}
}
}
closesocket ();//Закрываем
otvet="ERROR. Ошибка нахождения спец символов после ошибки. Ошибка "+formatic(13)+formatic(10)+otvet;
return 0;
}
}
closesocket ();//Закрываем
otvet="ERROR. Ошибка нахождения спец символов после заголовка.";
return 0;
}
closesocket ();//Закрываем
otvet="ERROR. Ошибка подключения к сервесу. Не вернул OK 200";
return 0;
}
closesocket ();//Закрываем
otvet="ERROR. Не удалось отправить запрос";
return 0;
}
otvet="ERROR. Не удалось открыть сокет.";
return 0;
}
hh:;
function savegetpost(char #s, int p)
{
sizf=size(#s[0]);//Узнаем номер в массиве конца строки с POST запросом
//Записываем \r\n или \r\n\r\n
for (int n=0; n < p; n++){s[sizf]=formatic(13);s[sizf+1]=formatic(10);sizf=sizf+2;}
s[sizf]=formatic(0);
}
function read_file(string pyt)
{
if (fopen (pyt, "rb")!=0)
{
size_file=freadb(#file[0], 9999);
fclose();
size_file--;
}
}
function save_content_length()
{
char c_cont_l[12];
strcpy(#c_cont_l[0], format(sizf-t_content_length));
int siz_cont_l=size(#c_cont_l[0]);
int r_cont_l=10-siz_cont_l;
for (int n=0; n < siz_cont_l; n++)s[t_content_length-14+r_cont_l+n]=c_cont_l[n];
}
оптимизируйте и уменьшайте код по возможности, если так критично 250 метров.. |
|
|
Remyc |
Отправлено: 23 Ноября, 2020 - 13:59:38
|
Участник
Покинул форум
Сообщений всего: 67
Дата рег-ции: Апр. 2019
Репутация: 1
|
То есть объем занимаемой памяти зависит от количества строк в скрипте?
Есть скрипт рабочий, больше 5000 строк, занимает 893МБ оперативной памяти, вот думаю как можно уменьшить потребление. Для начала уменьшил размеры массивов до минимально необходимых +1, потом часть переменных, которые используются только в функциях, но объявлены глобально, перенес в соответствующие функции. Дальше даже не знаю куда копать... Да и стоит ли вообще. По оперативной памяти есть два вопроса: 1) что занимает места меньше, три разные переменные или массив [3]? 2) что происходит с переменными объявленными в функции после выхода из функции? Они выгружаются или остаются в памяти.
Ну и очень интересно, вообще общие принципы оптимизации использования оперативной памяти. |
|
|
Zireael |
Отправлено: 23 Ноября, 2020 - 14:19:21
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: 1) что занимает места меньше, три разные переменные или массив [3]?
Одинаково. 3 переменные int это 12 байт и массив int на 3 элемента 12 байт.
Цитата: 2) что происходит с переменными объявленными в функции после выхода из функции? Они выгружаются или остаются в памяти.
Остаются, память выделяется 1 раз. |
|
|
|