Hilfe mein Code ist super lahm
-
zb: boost timer
http://www.boost.org/libs/timer/timer.htm
-
<windows.h> includen und dann mit GetTickCount().
Das gibt dir die seit dem Rechnerstart vergangenen Millisekunden.
int start = GetTickCount(); zu_messende_funktion(); int ende = GetTickCount(); int zeit_die_benoetigt_wurde = ende - start;
-
Also dieser Codeteil braucht über 18000 tics. ich vermute mal das sind dann 18 sekunden? ein 2. codeteil ist ähnlich aufgebaut und braucht auch fast so lange.
start=GetTickCount(); // Socket erzeugen sock = WSASocket(AF_INET,SOCK_STREAM,0,NULL,NULL,NULL); if (sock == -1) { perror ("socket()"); exit (EXIT_FAILURE); } // Adresse des Servers festlegen memset( &host_addr, 0, sizeof (host_addr)); host_addr.sin_family = AF_INET; host_addr.sin_port = htons (80);; host_addr.sin_addr.s_addr = inet_addr (host); if (host_addr.sin_addr.s_addr == INADDR_NONE) { // Server wurde nicht mit IP sondern mit dem Namen angegeben hostinfo = gethostbyname (host); if (hostinfo == NULL) { printf("gethostbyname()"); return; } memcpy((char*) &host_addr.sin_addr.s_addr, hostinfo->h_addr, hostinfo->h_length); } //erneut verbinden if (connect(sock, (struct sockaddr *) &host_addr, sizeof(struct sockaddr)) == -1) { printf("connect()"); return; } // HTTP-GET-Befehl erzeugen sprintf (command, "GET /filmanzeige.php?filmid%s HTTP/1.1\r\nHost: %s\r\n\r\n", linkX, "filmdb.de"); // Befehl senden bytes_sent = send (sock, command, strlen (command), 0); if (bytes_sent == -1) { printf("send()"); return; } // Antwort des Servers empfangen und auswerten // erstmal alles in ein File schreiben G_la = fopen("OUT.film.txt","wb"); while ((bytes_recv = recv (sock, buf, sizeof(buf), 0)) > 0) { fwrite(buf, 1, bytes_recv, G_la); } if (bytes_recv == -1) { fclose(G_la); printf( "recv()22"); return; } fclose(G_la); ende = GetTickCount(); printf("time4 = %i\n",ende-start);mfg und danke für eure hilfe
-
Mmh. Also im Code ist IMHO nichts, was irgendwie bremsen könnte. Daher tippe ich, dass die Serverantwort so lange dauert.
Um das weiter zu analysieren rate ich dir in der while-Schleife, welche die Serverantwort in die Datei speichert, einfach mal alles auf der Konsole auszugeben was reinkommt. Dann siehst du ja, ob es daran vielleicht hängt.
Und dazu die Zeitmessung nur um die while-Schleife legen. Und dann poste mal die Ergebnisse.
-
hast recht es is nur diese while schleife. Könnte die performance verbessert werden wenn man anstatt in ein file in einen buffer schreibt ?
Ich glaube fast das liegt an meinem router ist allerdings seltsam das wenn ich die seite manuell ansurfe das ganze um einiges schneller geht.
-
c°h° schrieb:
Könnte die performance verbessert werden wenn man anstatt in ein file in einen buffer schreibt ?
Definitiv nicht
Bei diesen Datenmengen (werden ja wohl nicht mehr als ein paar KB sein) merkst du die Plattenzugriffe gar nicht. Das spielt sich im Millisekundenbereich ab.
-
Ich vermute, dass der letzte recv-Aufruf, nachdem alles übertragen wurde, so lange dauert. Der wartet wohl darauf, dass die Gegenstelle die Verbindung schließt.
Ich kenne das HTT-Protokoll nicht auswendig, aber sollte es nicht möglich sein, aus dem Header der Antwort zu entnehmen, wie viele Bytes du genau empfangen musst? Dann müsstest du darauf nicht warten.
-
Das ist der Header
HTTP/1.1 200 OK Date: Mon, 17 Jul 2006 22:41:06 GMT Server: Apache/1.3.31 (Unix) PHP/4.3.8 X-Powered-By: PHP/4.3.8 Transfer-Encoding: chunked Content-Type: text/htmlleider lässt sich da nichts rauslesen.
trotzdem Danke für die Idee

-
c°h° schrieb:
Transfer-Encoding: chunked
...
leider lässt sich da nichts rauslesen.Äh, rfc2616 3.6.1 beschreibt doch, wie das bei chunked ist...
-
ich würd die WinInet API benutzen. Das selbst zu implementieren ist ein bisschen aufwendig.