[Mono-dev] BufferedStream.ReadByte and WriteByte are extremely inefficient

Tom Philpot tom.philpot at logos.com
Mon Jan 11 19:18:48 EST 2010


Ah, yes. I forgot to check that m_buffer.Length == 0 is explicitly disallowed in the constructor, so yes, eliminating an extra if will speed things up.

Here's another patch which is, again, MIT/X11 licensed.


On Jan 11, 2010, at 3:58 PM, Kornél Pál wrote:

Hi,

This actually means 1 == m_buffer.Length that effectively means no
buffering. As such there is no use to optimize (special case) for 1 ==
m_buffer.Length.

The code will continue to function properly in this special case and
will be faster in more likely (truly buffered) use cases by simply
eliminating the "if" by using the "else" case for the 1 ==
m_buffer.Length case as well.

Kornél

Alan McGovern wrote:
Actually, ignore the part about the 1 >= m_buffer.Length. On second
reading that's fine ;)

Alan.

On Mon, Jan 11, 2010 at 11:24 PM, Alan McGovern <alan.mcgovern at gmail.com
<mailto:alan.mcgovern at gmail.com>> wrote:

   Hey,

   This patch does three things:

   1) Optimises away some allocations - good
   2) Added extra checks which throw exceptions - without providing
   testcases - bad
   3) A fair few whitespace changes - bad

   Would you be able to submit two patches instead? The first should do
   the optimisation, the second should add the test+exception for
   CanRead and CanWrite as well as adding some nunit test cases which
   show that this is required.

   Also:

   + if (1 >= m_buffer.Length) {
   + return m_stream.ReadByte ();

   That should really be: if m_buffer.Length == 0 as the case where the
   Length is >= 0 is already handled. It makes things easier to understand.

   Thanks,
   Alan.

   On Mon, Jan 11, 2010 at 10:53 PM, Tom Philpot <tom.philpot at logos.com
   <mailto:tom.philpot at logos.com>> wrote:

       Sorry, for double posting this patch. Snow Leopard's Mail.app w/
       Exchange support turned my "This is contributed under the
       MIT/X11 license" into an attachment.

       For the record, the code in this patch is contributed under the
       MIT/X11 license


       _______________________________________________
       Mono-devel-list mailing list
       Mono-devel-list at lists.ximian.com
       <mailto:Mono-devel-list at lists.ximian.com>
       http://lists.ximian.com/mailman/listinfo/mono-devel-list




------------------------------------------------------------------------

_______________________________________________
Mono-devel-list mailing list
Mono-devel-list at lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: BufferedStream_ReadWriteBytePatch.txt
Url: http://lists.ximian.com/pipermail/mono-devel-list/attachments/20100111/149e909a/attachment.txt 


More information about the Mono-devel-list mailing list