[Mono-dev] Should we replace MemoryStream?

Thad Thompson TThompson at Nucsafe.com
Tue Nov 10 10:35:25 EST 2009


Hey Ya'll,
I'm all about performance, but there's more to Robert Jordan's point
than just the access time. As it's always been described and
implemented, a MemoryStream is an abstraction over an array of bytes.
GetBuffer is an escape interface which allows me to drop and resume that
abstraction whenever it's convenient. It would be unfortunate if this
pattern were broken everywhere it is currently used:

------------------------------------------------------------------------
-
static void Main(string[] args)
{
    var m = new MemoryStream();
    var b = Encoding.UTF8.GetBytes("HELO World");
    m.Write(b, 0, b.Length);

    var vBuf = m.GetBuffer();

    // Swap
    var t = vBuf[0];
    vBuf[0] = vBuf[1];
    vBuf[1] = t;

    // Prints "EHLO World"
    System.Console.WriteLine(Encoding.UTF8.GetString(m.ToArray()));
}
------------------------------------------------------------------------
-

If we're really worried about memory buffers and remoting performance,
I'd humbly suggest that perhaps the
System.ServiceModel.Channels.BufferManager class could use some lovin.

Regards,
-Thad



More information about the Mono-devel-list mailing list