El tamaño del ejecutable en memoria crece, crece y crece...

Iniciado por Vaagish, 21 Marzo 2014, 05:26 AM

0 Miembros y 2 Visitantes están viendo este tema.

Vaagish

Hola!

Alguien sabe en que circunstancias se da que el ejecutable aumente su tamaño indefinidamente? Esta claro que aumentando una variable (en tamaño), un buffer o algo por el estilo, pero quizás en otras situaciones también..

Es que tengo esta función:

Código (cpp) [Seleccionar]
HINTERNET SendRequest(HINTERNET Session, char *data1, char *data2)
{
char B1[1024] = "\0", B2[1024] = "\0";
        // Data1 Format
sprintf_s(B1, sizeof(B1), HTTPTEXT, "form-data", "A", "text/plain");
memcpy(B1 + strlen(B1), data1, strlen(data1));
// Data2 Format
sprintf_s(B2, sizeof(B2), HTTPTEXT, "form-data", "B", "text/plain");
memcpy(B2 + strlen(B2), data2, strlen(data2));

char BUFFER[2048] = "\0";

memcpy(BUFFER, B1, strlen(B1));
memcpy(BUFFER + strlen(BUFFER), "\r\n", 2);
memcpy(BUFFER + strlen(BUFFER), B2, strlen(B2));

memcpy(BUFFER + strlen(BUFFER), HTTPENDS, strlen(HTTPENDS));

HINTERNET HIntRequest = HttpOpenRequest(Session, "POST", "php/core.php", 0, 0, 0, INTERNET_FLAG_RELOAD, 0);

if (HttpSendRequest(HIntRequest, HTTPHEAD, strlen(HTTPHEAD), BUFFER, strlen(BUFFER)))
return HIntRequest;
else
return false;
}


Yo a esta función la llamo cada 4 segundos, y cada vez que se invoca,, el ejecutable aumenta unos 4k en memoria.. debería preocuparme?
Y de paso, si alguien me ilumina como optimizarla mejor aun!!

Saludos!!


Vaagish

Excelente,, jamas hubiera pensado eso..
Pero por lo que veo en ese boletín, la única solución seria corregir el problema en la maquina que experimente este problema,, esa no es solución para mi..

Si dejo el ejecutable así, es muy probable que se coma toda la ram,, no?
Y si Microsoft no tiene otra solución, lo mejor seria usar sockets,, no ?

Saludos!! Y Gracias!

Eternal Idol

¿Estas usando SSL?

Sino revisa un poco el codigo. ¿Que pasa si HttpOpenRequest funciona y HttpSendRequest no? Cuando SendRequest no devuelve false, mmm, llamas a InternetCloseHandle con su resultado?
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Vaagish

Fua, no había leído o mejor dicho prestado atención al bruto cartel que dice:

CitarSe produce un problema de pérdida de memoria cuando se ejecuta una aplicación que utiliza la función HttpSendRequest de la API de WinHTTP o de la API de WinINet para enviar solicitudes de Secure Sockets Layer en Windows XP Service Pack 3

CitarSino revisa un poco el codigo. ¿Que pasa si HttpOpenRequest funciona y HttpSendRequest no? Cuando SendRequest no devuelve false, mmm, llamas a InternetCloseHandle con su resultado?

Voy a revisar si.. a lo mejor me esta faltando (o sobrando) algo.. el código sigue bastante mas, puede ser eso,, o al llamar a la función...

Gracias! Saludos!

Eternal Idol

Cita de: Vaagish en 21 Marzo 2014, 18:52 PMFua, no había leído o mejor dicho prestado atención al bruto cartel que dice:

Ya me parecia raro que fuera eso  :silbar:

Cita de: Vaagish en 21 Marzo 2014, 18:52 PMVoy a revisar si.. a lo mejor me esta faltando (o sobrando) algo.. el código sigue bastante mas, puede ser eso,, o al llamar a la función...

Ahi tenes un escenario de leak seguro, seria mejor que tuvieras en cuenta si HttpOpenRequest devuelve diferente de NULL para despues llamar a HttpSendRequest, y en el caso de que esta falle llamar inmediatamente a InternetCloseHandle (si seguis con la misma logica de devolver false en caso de que falle).
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Vaagish

Ta,, ya esta el problema.. al no llamar a InternetCloseHandle pasa eso.. O sea, todo eso que dijiste EI jeje

El código se puede mejorar mucho se, voy a meterle a eso ahora..

Gracias Genio!

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

x64core

Pero el problema de el enlace es debido a un mal diseño de Windows , no de la aplicación... sino, ya me estaria preocupando
yo también, por eso es mejor usar ws2_32, require más trabajo pero los bots quedan de lujo ^^

Eternal Idol

Cita de: x64Core en 22 Marzo 2014, 04:22 AM
Pero el problema de el enlace es debido a un mal diseño de Windows , no de la aplicación... sino, ya me estaria preocupando
yo también, por eso es mejor usar ws2_32, require más trabajo pero los bots quedan de lujo ^^

Si, pero ese problema no tenia nada que ver con el de Vaagish.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón