Здравствуйте.
Скажите, экзешник скрипта на 60 строчек, в котором реализованы поиск одной картинки (без файла, изображение прямо в скрипте) и клики мышкой, занимает памяти больше 250 Мб, это нормально? Я считаю, что это очень-очень много.
1. Adomb - 19 Июля, 2015 - 01:37:10 - перейти к сообщению
2. Kibor - 19 Июля, 2015 - 02:29:56 - перейти к сообщению
Может быть... Кибор прожерлив, за то потом быстро отрабатывает.
такой код собранный в exe с запакованным в него рисунком в ресурсы размером 132 114 ест 36 метров оперативки..
Такой (примерно 300 строк) в EXE ест 293 метра
оптимизируйте и уменьшайте код по возможности, если так критично 250 метров..
такой код собранный в 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";
}
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];
}
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 метров..
3. Remyc - 23 Ноября, 2020 - 05:59:38 - перейти к сообщению
То есть объем занимаемой памяти зависит от количества строк в скрипте?
Есть скрипт рабочий, больше 5000 строк, занимает 893МБ оперативной памяти, вот думаю как можно уменьшить потребление. Для начала уменьшил размеры массивов до минимально необходимых +1, потом часть переменных, которые используются только в функциях, но объявлены глобально, перенес в соответствующие функции. Дальше даже не знаю куда копать... Да и стоит ли вообще. По оперативной памяти есть два вопроса: 1) что занимает места меньше, три разные переменные или массив [3]? 2) что происходит с переменными объявленными в функции после выхода из функции? Они выгружаются или остаются в памяти.
Ну и очень интересно, вообще общие принципы оптимизации использования оперативной памяти.
Есть скрипт рабочий, больше 5000 строк, занимает 893МБ оперативной памяти, вот думаю как можно уменьшить потребление. Для начала уменьшил размеры массивов до минимально необходимых +1, потом часть переменных, которые используются только в функциях, но объявлены глобально, перенес в соответствующие функции. Дальше даже не знаю куда копать... Да и стоит ли вообще. По оперативной памяти есть два вопроса: 1) что занимает места меньше, три разные переменные или массив [3]? 2) что происходит с переменными объявленными в функции после выхода из функции? Они выгружаются или остаются в памяти.
Ну и очень интересно, вообще общие принципы оптимизации использования оперативной памяти.
4. Zireael - 23 Ноября, 2020 - 06:19:21 - перейти к сообщению
Цитата:
1) что занимает места меньше, три разные переменные или массив [3]?
Одинаково. 3 переменные int это 12 байт и массив int на 3 элемента 12 байт.
Цитата:
2) что происходит с переменными объявленными в функции после выхода из функции? Они выгружаются или остаются в памяти.
Остаются, память выделяется 1 раз.
5. ivantu - 23 Ноября, 2020 - 06:26:42 - перейти к сообщению
я 200 мб пока сократил с 650 до 450 убавил )
6. Remyc - 24 Ноября, 2020 - 00:16:51 - перейти к сообщению
ivantu , А за счет чего снижал?
7. ivantu - 24 Ноября, 2020 - 00:30:13 - перейти к сообщению
Массивы сократил трехмерные
Но я бы еще сократил, только не знаю что... т.к. даже 400+ мб, это много, с учетом того что это даже не половина того что я задумал.
(Добавление)
Я тут подумал, а если определенные участки кода прятать в Dll , потребление не сократиться?
Но я бы еще сократил, только не знаю что... т.к. даже 400+ мб, это много, с учетом того что это даже не половина того что я задумал.
(Добавление)
Я тут подумал, а если определенные участки кода прятать в Dll , потребление не сократиться?
8. Remyc - 24 Ноября, 2020 - 02:37:16 - перейти к сообщению
ivantu , не подскажу, но поидее нет. После вызова команд из длл переменные останутся в памяти, как и с функциями. То есть остается только сокращение кода... Хотя мне уже некуда, одни сплошные функции, уже даже почти полностью переделал скрипт из процедурного в объектно-ориентированный даже разобрался что это такое
9. ivantu - 24 Ноября, 2020 - 14:01:13 - перейти к сообщению
Хотел еще спросить может запись кода в одну строку уменьшает потребление памяти?
или
CODE:
getdisplay(sys_col_bit, cen_x, cen_y);
cen_x=cen_x/2; cen_y=cen_y/2;
cen_x=cen_x/2; cen_y=cen_y/2;
или
CODE:
getdisplay(sys_col_bit, cen_x, cen_y); cen_x=cen_x/2; cen_y=cen_y/2;
10. Kibor - 24 Ноября, 2020 - 14:06:25 - перейти к сообщению
Все равно.