Oppure

Loading
06/02/12 16:58
Molin Mauro
Ciao a tutti!
Devo scrivere un file vuoto (mi serve per effettuare una specie di "benchmark";) su un altro PC nella stessa LAN. Pensavo di usare il metodo IO.FileStream
Questo è il mio codice inserito in un BackgroundWorker:
Dim a As New IO.FileStream(TextBox1.Text & "testfile", IO.FileMode.Create)
        For i As Long = 0 To max - 1
            a.WriteByte(1)
            b = i
        Next
        a.Close()


La variabile 'max' contiene, in byte, la grandezza del file da scrivere e la variabile 'b' mi serve per mostrare una ProgressBar.

Il mio problema è che se eseguo questo software per scrivere in un Hard Disk locale va molto veloce (oltre 100 MB/s) ma se provo a dargli una posizione LAN (come \192.168.1.9\Condivisione) scrive all'imbarazzante velocità di 3MB/s, quando so di per certo che dovrei fare perlomeno 9-10MB/s.
Inoltre, passando il programma ad un mio amico che ha la LAN Gigabyte (molto più veloce di quella tradizionale) gli va a soli 6MB/s.

Ho controllato l'utilizzo di CPU del processo mentre scrive ed è a 1-2%, quindi più o meno nella norma.

Cosa sbaglio? C'è un metodo più efficente per scrivere un file in LAN?

Grazie anticipatamente delle risposte,
Mauro ;)
Ultima modifica effettuata da Molin Mauro 06/02/12 17:01
aaa
07/02/12 10:39
Il Totem
Sicuramente una parte della colpa è da imputare alla funzione WriteByte. Non devi scrivere un byte alla volta, ma un buffer completo (solitamente 1, 2, 4 o 8 KiB). Altrimenti le trasmissioni hanno troppo overhead.
Inoltre penso che l'invio avvenga di default tramite TCP, quindi c'è da considerare tutti i meccanismi di controllo di flusso di livello 4. Ovviamente non arriverai mai a sfruttare tutta la capacità del canale sottostante.

P.S.: ricordati di convertire da B/s a b/s. 6B/s sono 48Mbit/s. Considera anche che non tutta la banda è a disposizione per il tuo livello applicativo. Ci sono altri processi che verosimilmente usano la stessa interfaccia di rete e poi ci sono i vari protocolli di routing e spanning tree i cui pacchetti viaggiano per la sottorete.
aaa