[Mono-dev] Performance of TextWriter.ReadToEnd()

Jimmy Tang talyian at gmail.com
Tue Jul 14 19:06:29 EDT 2009

I'm playing around with some of the language shootout game benchmarks
at http://shootout.alioth.debian.org,
and I noticed a striking performance issue;

I'm testing on mono 2.4 build 6 / vista64 vs .NET 3.5 sp1. Test code:

static void Main() {
    var sequence = Console.In.ReadToEnd();

test input is a 50MB file.


$ time ./test.exe < ../fasta5M.in.txt
real    0m1.352s
user    0m0.015s
sys     0m0.000s

$ time mono test.exe < ../fasta5M.in.txt
real    0m18.154s
user    0m0.015s
sys     0m0.000s

I see the ReadToEnd() is implemented along the lines of
    char[] buffer;
    while(Read(buffer) > 0)

Just as a rudimentarytest using a temp string instead of char[]:
    string buffer;
    while((buffer = ReadLine()) != null)

is much faster (~10x, similar to the .NET performance), but I'd
imagine this generates more garbage.
not being familiar with the mono codebase, I wasn't sure if the
problem was with StreamReader.Read(char[],int,int) or with
Can anyone shed some insight on this problem?

More information about the Mono-devel-list mailing list