wow there is so much wrong with this test, <br><br>First I find it hard to believe that you got up to 90% efficiency on a transfer&nbsp; at all, network over head should have knocked down your transfer more than that.&nbsp; <br><br>
first are these the same machine<br>what other machines are on the network<br>how many times did you run each test (25 to 50 times is the standard where I work, but we use automated tools to run and keep track)<br>what are you reading these speeds from?
<br>if they are different machines, then when it comes to networks the protocol is the last part to look at<br><br>and last none of the speeds listed are slow, for a small 20 meg file 3.75 MBytes a second is not bad and may have more to do with Linux keeping a single packet size, while windows tries to adjust packet size for short&nbsp; transfers.  
<br><br><div><span class="gmail_quote">On 6/14/07, <b class="gmail_sendername">Andreas Hund</b> &lt;<a href="mailto:ahund@ionosinst.de">ahund@ionosinst.de</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>Hi,<br>is MONO network streaming slow?<br><br>First I built a very simple client/server program<br>to get a data stream over network.<br>In both programs I used a TcpClient,<br>a NetworkStream and a byte array (8kB chunks)
<br>to stream 20 MB of data.<br><br>Then I tested the transfer rate of the client/server<br>program between different Linux/MONO (<a href="http://1.2.3.1">1.2.3.1</a>)<br>and different Windows/.NET (2.0) hosts<br>in a 100 Mbit/s ethernet.
<br><br>The strange result: If MONO was involved<br>the speed was dramatically reduced.<br>Only a .NET/.NET transfer showed a realistic<br>rate.<br><br>.NET --&gt; MONO : 31...42 Mbit/s&nbsp;&nbsp; LOW<br>MONO --&gt; MONO : 43...45 Mbit/s&nbsp;&nbsp; LOW
<br>MONO --&gt; .NET : 51...76 Mbit/s&nbsp;&nbsp; LOW<br>.NET --&gt; .NET : 94 Mbit/s&nbsp;&nbsp; O.K.<br><br>What&#39;s wrong here?<br>Any suggestions or hints?<br>Thanks in advance.<br><br>Cheers<br>Andreas<br><br><br>=======================================================
<br><br><br>Sourcecodes:<br><br>// ******<br>// Client<br>// ******<br><br>using System;<br>using System.IO;<br>using System.Net.Sockets;<br><br>namespace SimpleStreamClient<br>{<br>&nbsp;&nbsp;class SimpleStreamClient<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;public static void Main(string[] args) {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TcpClient client;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NetworkStream netStream;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[] buf = new byte[8192];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int bytesToReceive = buf.Length;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int receivedBytes = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int bytesReceived = 0;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int index = 0; index &lt; 10; index++) {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client = new TcpClient(args[0], 14866);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;netStream = client.GetStream();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime startTime = DateTime.Now;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bytesReceived = 0;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(true) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bytesToReceive = 
buf.Length;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(bytesToReceive &gt; 0) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;receivedBytes = netStream.Read(buf, 0, bytesToReceive);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(receivedBytes == 0) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bytesReceived += receivedBytes;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bytesToReceive -= receivedBytes;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(receivedBytes == 0) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; double rate = bytesReceived / (((TimeSpan)(DateTime.Now -<br>startTime)).TotalMilliseconds * 1000) * 8;
<br>&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(bytesReceived + &quot; Bytes received (&quot; + rate +<br>&quot;MBit/s).&quot;);<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; Console.ReadKey();<br>&nbsp;&nbsp;}<br> }<br>}<br><br><br>// ******<br>// Server<br>// ******<br><br>using System;
<br>using System.IO;<br>using System.Net;<br>using System.Net.Sockets;<br><br>namespace SimpleStreamServer<br>{<br>&nbsp;&nbsp;class SimpleStreamServer<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;public static void Main(string[] args) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TcpClient client;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NetworkStream netStream;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[] bigBuf = new byte[20000000];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MemoryStream ms = new MemoryStream(bigBuf);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[] buf = new byte[8192];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string host = Dns.GetHostEntry(args[0]).AddressList[0].ToString();
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IPAddress ipAddr = IPAddress.Parse(host);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TcpListener listener = new TcpListener(ipAddr, 14866);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listener.Start();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(true) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&quot;Waiting for client ...&quot;);
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client = listener.AcceptTcpClient();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&quot;New client!&quot;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;netStream = client.GetStream();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ms.Seek(0, SeekOrigin.Begin);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int readBytes = 0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while((readBytes = ms.Read(buf, 0, buf.Length)) != 0) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;netStream.Write(buf, 0, readBytes);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;netStream.Flush();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client.Close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>}<br><br>
--<br>View this message in context: <a href="http://www.nabble.com/Why-is-MONO-network-streaming-slow--tf3921539.html#a11119438">http://www.nabble.com/Why-is-MONO-network-streaming-slow--tf3921539.html#a11119438</a><br>Sent from the Mono - General mailing list archive at 
<a href="http://Nabble.com">Nabble.com</a>.<br><br>_______________________________________________<br>Mono-list maillist&nbsp;&nbsp;-&nbsp;&nbsp;<a href="mailto:Mono-list@lists.ximian.com">Mono-list@lists.ximian.com</a><br><a href="http://lists.ximian.com/mailman/listinfo/mono-list">
http://lists.ximian.com/mailman/listinfo/mono-list</a><br></blockquote></div><br><br clear="all"><br>-- <br>William S. Huskey<br><br>UNIX Systems Engineer<br><br>Maritime Systems Solutions Division<br><br>SAIC<br><br>Tel: 425-267-5643
<br><br>Email: <a href="mailto:huskeyw@saic.com">huskeyw@saic.com</a>