I'm not sure if this is related but there are some terrible inefficiencies in
following two classes

mcs/class/corlib/System.IO/TextWriter.cs
mcs/class/System.Web/System.Web/HttpWriter.cs

I've not had a chance to make a patch yet, so I'll explain so someone else can
if they want to get it done before I can. But suffice to say that how one calls
Write on a TextWriter output stream in XSP/Mod_mono can double your
connections/sec (as it did for me)!

It comes down to this method in TextWriter.cs

public virtual void Write (char[] value)
{
        if (value != null) {
                for (int i = 0; i < value.Length; ++i)
                        Write (value [i]);
        }
}

Which I think should look like this

public virtual void Write (char[] value)
{
        // No if statement needed since TextWriter is abstract 
        // the implementing class should take care of checking for null.
        Write(value, 0, value.Length);  
}

And then in HttpWriter.cs you have the following method:

public override void Write (char ch)
{
        Write(new string (ch, 1));
}

Which was being called by the TextWriter method at the top and was causing a
class creation explosion. I'm not sure what's the best way to fix this method
but by calling the Write(char[] c, int index, int count) instead I was able to
double the connections/sec for my app on XSP.

Mike Glenn





 


_______________________________________________
Mono-list maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to