Mr Burns Skrevet 31. januar 2008 Del Skrevet 31. januar 2008 Hvordan kan jeg ta tiden det tar å overføre en viss mengde data, f.eks. et byte-array. Tenkte jeg kunne lage en networkStream eller en Socket, og ta tiden det tar å sende ut arrayet. Men send() og write() ser ut til å returnere rimelig umiddelbart. Noen forslag? Eller noen som hvet om en ferdiglaget C#-sak? Lenke til kommentar
Manfred Skrevet 31. januar 2008 Del Skrevet 31. januar 2008 Bruk en StopWatch, eller hva den heter, start den rett før og stopp den rett etter... Lenke til kommentar
Spartakus Skrevet 1. februar 2008 Del Skrevet 1. februar 2008 (endret) DateTime og TimeSpan burde vel kunne brukes her. Er litt usikker på oppløsningen på de, siden du vet at dette går kjapt. Noen sånt: DateTime before = DateTime.Now; //Nettverkskode DateTime after = DateTime.Now; TimeSpan ts = after - before; Endret 1. februar 2008 av Spartakus Lenke til kommentar
Mr Burns Skrevet 1. februar 2008 Forfatter Del Skrevet 1. februar 2008 Har ikke prøvd stopwatch, men timespan. Problemet er fremdeles at send() og write() returnerer umiddelbart, slik at det tar 0 millisekund... Uansett, brukte 1 million ping til å bestemme om linken var i orden. Gjennomsnittelig RTT var på rundt 0,05-6 ms før og etter endring i nettet, så da virker det... Lenke til kommentar
Manfred Skrevet 1. februar 2008 Del Skrevet 1. februar 2008 Som sagt: System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); //Noe sw.Stop(); Lenke til kommentar
GeirGrusom Skrevet 1. februar 2008 Del Skrevet 1. februar 2008 Kanskje System.Net.NetworkInformation.Ping kan brukes? Lenke til kommentar
Mr Burns Skrevet 4. februar 2008 Forfatter Del Skrevet 4. februar 2008 (endret) Som sagt, så var problemet at Send() og Write() returnerte umiddelbart, ikke selve tidsmålingen... Uansett, brukte en asynkron sending, med callback når sendingen var ferdig. Det blir omtrent noe sånt... private void button4_Click(object sender, EventArgs e) { int numBytes = (int)bytesToSendUpDown.Value; Random r = new Random(); byte[] rxBuffer = new byte[42]; string host = hostTextBox.Text; if (host.Equals("")) host = "localhost"; tc = new TcpClient(); s = tc.Client; tc.Connect(host, 4242); s = tc.Client; // Set up some data to send byte[] buffer = new byte[numBytes]; r.NextBytes(buffer); SocketError se = new SocketError(); sw.Start(); // Dette er en sånn stopwatch Mannfred liker så godt... s.BeginSend(buffer, 0, numBytes, SocketFlags.None, out se, finishedSend, s); } private void finishedSend(IAsyncResult iar) { Socket s = (Socket)iar.AsyncState; int i = s.EndSend(iar); sw.Stop(); TimeSpan ts = sw.Elapsed; s.Close(); tc.Close(); // Beregne båndbredde her... } Men dette fungerer ikke særlig bra, det tar lengre å lengre tid å kjøre for hver gang jeg tester. Ping har jeg allerede implementert, og det er veldig enkelt å gjøre. Endret 4. februar 2008 av Mr Burns Lenke til kommentar
Manfred Skrevet 4. februar 2008 Del Skrevet 4. februar 2008 Hvis du bruker den asynkron så kan du jo sette på en event på "Finish" eller noe slikt da. Så hvis du starter StopWatch ved Start(), og så stopper den i funksjonen som håndterer End-eventen, så vil du jo få en måling... Lenke til kommentar
Mr Burns Skrevet 4. februar 2008 Forfatter Del Skrevet 4. februar 2008 Hvis du bruker den asynkron så kan du jo sette på en event på "Finish" eller noe slikt da. Så hvis du starter StopWatch ved Start(), og så stopper den i funksjonen som håndterer End-eventen, så vil du jo få en måling... Ja, som du ser i koden er det nettopp det jeg har gjort. Eneste problemet er at hver test tar lengre tid en den forrige, så helt riktig kan det ikke være. Lenke til kommentar
The Jackal Skrevet 4. februar 2008 Del Skrevet 4. februar 2008 Kanskje du må nullstille stoppeklokken din mellom hver gang? Lenke til kommentar
Manfred Skrevet 4. februar 2008 Del Skrevet 4. februar 2008 Det må du nok, ja.. Ikke så dum du Lenke til kommentar
Mr Burns Skrevet 4. februar 2008 Forfatter Del Skrevet 4. februar 2008 (endret) haha, se der ja! Hmmm, 100000000 byte på 125 millisekund.... Socket sin beginSend og endSend returnere også etter å ha gitt bufferne videre til operativsystemet... EDIT: Ved å ta tiden på "serveren", dvs den som mottar data, kan jeg da beregne at vi har en effektiv båndbredde på ca. 480Mb/s... Endret 4. februar 2008 av Mr Burns Lenke til kommentar
Manfred Skrevet 4. februar 2008 Del Skrevet 4. februar 2008 100000000 byte på 125 ms blir jo 800 byte/sekund. det var vel ikke noe å skryte av? Lenke til kommentar
j000rn Skrevet 4. februar 2008 Del Skrevet 4. februar 2008 100000000 byte på 125 ms blir jo 800 byte/sekund. det var vel ikke noe å skryte av? Jeg er imponert over mattekunnskapene dine! Lenke til kommentar
Manfred Skrevet 4. februar 2008 Del Skrevet 4. februar 2008 Haha... Ja, ikke sant.. Lenke til kommentar
MirusMentis Skrevet 15. mars 2008 Del Skrevet 15. mars 2008 Ble du ferdig med dette programmet? Er det en server del og en kllient del? Kunne godt tenkt meg å se litt nærmere på dette, om du ikke vil gi fra deg kilden, så kanskje du poster en .exe? Lenke til kommentar
Mr Burns Skrevet 17. mars 2008 Forfatter Del Skrevet 17. mars 2008 Ble du ferdig med dette programmet? Er det en server del og en kllient del? Kunne godt tenkt meg å se litt nærmere på dette, om du ikke vil gi fra deg kilden, så kanskje du poster en .exe? Ja, jeg fikk til noe som fungerte. Laget ett program som fungerte enten som server eller klient. Jeg /tror/ jeg kan dele koden, må bare sjekke med sjefen først, siden jeg laget det på jobb. Lenke til kommentar
MirusMentis Skrevet 17. mars 2008 Del Skrevet 17. mars 2008 Ok du får si ifra når du har hørt med sjefen. Lenke til kommentar
Mr Burns Skrevet 18. mars 2008 Forfatter Del Skrevet 18. mars 2008 Ok du får si ifra når du har hørt med sjefen. Ser ut til at han har reist på ferie... Han er tilbake 27. Håper du ikke har det travelt Lenke til kommentar
MirusMentis Skrevet 18. mars 2008 Del Skrevet 18. mars 2008 nei nei.. Har absoultt ingen hast.. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå