[Mono-devel-list] Remoting speedup using buffered streams

Michel Dagenais michel.dagenais at polymtl.ca
Sun Nov 30 00:11:14 EST 2003

I used Mono and Remoting this year as assignments for a Distributed
Systems course and was disappointed with the Remoting performance as
compared to other systems used in the past (e.g., CORBA). I tried to
figure out why I was getting only 10 simple remote calls per second
(client and server on the same machine mono 0.28, method without
argument returning a 4 byte string). I finally realized that a large
part of the communication for each call was done one byte at a time
(Send/Receive on the socket).

I then tried a very simple modification, inserting a BufferedStream
around the GetStream in Tcp Channels:

./System.Runtime.Remoting.Channels.Tcp/TcpConnectionPool.cs:                   _stream = new BufferedStream(client.GetStream());
./System.Runtime.Remoting.Channels.Tcp/TcpServerChannel.cs:                    _stream = new BufferedStream(_client.GetStream());

I now get about 1000 calls per second, a 100x speedup. I realize that
mono is still not in the performance tuning phase. However, this may be
of interest. Are there reasons for not using buffered streams that I
don't see?

More information about the Mono-devel-list mailing list