Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C#]rallentamenti assurdi con i socket e i server web google

    Buon giorno!

    utilizzando i socket e NetStream per costruire una richiesta http,
    ( quindi utilizzando byte[] per ricevere i dati i modo da non aver problemi di encoding con immagini o altro )
    scopro che i server google ( o poi ne ho visti altri ) non riempiono del tutto il buffer e il socket rimane in attesa per un tempo ingiustificatamente lungo

    codice:
    byte[] buffer = new byte[1024];      //1024=1Kb
    do{
       ActByteReceived=Net.Read(buffer, 0, buffer.Length);
       file.Write(buffer,0,ActByteReceived);         //save on a file the data received
    }while(ActByteReceived!=0);
    succede quanto segue
    1. il serverweb riempie tutto il buffer del client ( 1024 byte )
    2. il serverweb riempie tutto il buffer del client ( 1024 byte )
    ... dopo un po, ad esempio dopo 50 cicli
    50. il serverweb NON riempie tutto il buffer del client ( 98 byte ) ( ma ci saranno ancora dati che arriveranno )
    << C# si congela per un tempo lunghissimo >>
    51. il serverweb riempie tutto il buffer del client ( 1024 byte )

    come posso fare in modo che non ci impieghi 5 minuti a leggere una banale pagina di google ?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Prova ad aggiungere all'interno del ciclo

    Application.DoEvents();
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    come DoEvents ?
    la cpu non è in carico, il ciclo lavoro solo quando i dati arrivano
    ( e nel caso denunciato arrivano dopo molto quando il server risponde in maniera a me sconosciuta )

    p.s. è C# ..c'e' Thread.sleep(0) non vb.net ( vabhè che va tutto nel pentolone eseguibile del .net )

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da novainvicta
    p.s. è C# ..c'e' Thread.sleep(0) non vb.net ( vabhè che va tutto nel pentolone eseguibile del .net )
    Application.DoEvents();

    è C# ... che c'entra il VB.NET ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    come puoi vedere dal titolo il problema che desidero risolvere si manifesta in C#

    EDIT: specifico che i rallentamenti non sono del computer ( la cpu non sotto carico ), i rallentamenti sono della comunicazione in sè per sè, il download delle pagine google è ingiustificatamente lento ( e così altri siti, mentre con altri che hanno una risposta più "normale" c'è una velocità d'esecuzione impressionante )

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da novainvicta
    come puoi vedere dal titolo il problema che desidero risolvere si manifesta in C#
    Appunto ... ! Forse non ci capiamo ... Application.DoEvents(); è in C#!
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    cosa bisogna importare?
    Application.DoEvents(); mi dice che "il nome Application non è nel contesto corrente"
    il mio programma è un servizio scritto in SharpDevelop

    EDIT:
    leggo ora che Application.DoEvents() è materia da WinForms.. ..finestre.. mentre parlando di servizi quindi per definizione senza finestre che faccio?

    tra l' altro ho provato tanto per fare una prova ad abassare il numero di byte a 64 e fare un Slepp(5) ogni ciclo, curiosamente funziona, ma come faccio metto numeri a caso???
    se alzo da 64 a 128 già si inceppa come prima.. senza parlare dei 5 millisendi.. sul mio pc bastano, su un pc altrui?!?

    sono sicuro che .net sia previsto qualche strumento più preciso del Dio.PensaciTu(); || Dio.VaiACaso();

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da novainvicta
    leggo ora che Application.DoEvents() è materia da WinForms.. ..finestre.. mentre parlando di servizi quindi per definizione senza finestre che faccio?
    Scusa ... ma dove l'avevi scritto, fino ad ora, che era un servizio?

    sono sicuro che .net sia previsto qualche strumento più preciso del Dio.PensaciTu(); || Dio.VaiACaso();
    Magari dai maggiori dettagli sul codice ... cominciando dall'oggetto Net ... di che tipo è esattamente ...?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.