[Mono-dev] Should we replace MemoryStream?

Miguel de Icaza miguel at novell.com
Mon Nov 9 18:15:17 EST 2009


Hello,

> What do you think about extending ChunkedMemoryStream to include an
> option based on a chunk pool, so memory is actually reused instead of
> freed and re-allocated? Wouldn't it be good to reduce fragmentation (I'm
> still thinking on remoting)??

This would work;

Additionally, it might make sense to use the suggestion from Steve to
use plain memory allocation up to a certain point (below some threshold)
and then switch to chunk after that to avoid allocating 16k even for
memory streams that might only have 100 bytes for example.

> 
> 
> pablo
> 
> 
> www.plasticscm.com
> 
> 
> 
> Steve Bjorg wrote:
> > The implementation could be adapted so that if the chunked memory  
> > stream is initialized with an existing byte array it behaves like it  
> > did in the past.  It's possible that the best approached can be  
> > derived for the various MemoryStream constructors.
> > 
> > The question is what is the most common usage pattern?  If it's  
> > GetBuffer(), then there will be a performance and overhead hit.   
> > However, if it's using Write()/Read() as we do, then there are some  
> > significant gains to be had.  GetBytes() would also benefit, though  
> > not as much.
> > 
> > - Steve
> > 
> > --------------
> > Steve G. Bjorg
> > http://mindtouch.com
> > http://twitter.com/bjorg
> > irc.freenode.net #mindtouch
> > 
> > On Nov 9, 2009, at 11:41 AM, Andreas Nahr wrote:
> > 
> >> Are you talking about System.IO.MemoryStream?
> >> Then imho this would be a problematic move.
> >> Most people are used to new MemoryStream (someByteArray) being O(0)  
> >> time,
> >> but with ChunkedStream would be O(n). In fact in those cases  
> >> ChunkedStream
> >> would need twice the memory because it would still need to retain the
> >> original byte array (e.g. for GetBuffer).
> >>
> >> Happy hacking
> >> Andreas
> >>
> >> -----Ursprüngliche Nachricht-----
> >> Von: mono-devel-list-bounces at lists.ximian.com
> >> [mailto:mono-devel-list-bounces at lists.ximian.com] Im Auftrag von  
> >> Miguel de
> >> Icaza
> >> Gesendet: Montag, 9. November 2009 19:10
> >> An: mono-devel-list
> >> Betreff: [Mono-dev] Should we replace MemoryStream?
> >>
> >> Hello folks,
> >>
> >>    I just blogged about a memory fragmentation issue here:
> >>
> >> 	http://tirania.org/blog/archive/2009/Nov-09.html
> >>
> >>    And I am wondering: since MemoryStream is one of these sources of
> >> problems, we could replace this implementation with MindTouch's
> >> ChunkedStream.
> >>
> >> Miguel.
> >>
> >> _______________________________________________
> >> Mono-devel-list mailing list
> >> 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
> > 
> > _______________________________________________
> > Mono-devel-list mailing list
> > 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



More information about the Mono-devel-list mailing list