Hey,<br><br><div class="gmail_quote">On Mon, Nov 9, 2009 at 6:29 PM, Avery Pennarun <span dir="ltr">&lt;<a href="mailto:apenwarr@gmail.com">apenwarr@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="im">On Mon, Nov 9, 2009 at 1:10 PM, Miguel de Icaza &lt;<a href="mailto:miguel@novell.com">miguel@novell.com</a>&gt; wrote:<br>
&gt;    I just blogged about a memory fragmentation issue here:<br>
&gt;<br>
&gt;        <a href="http://tirania.org/blog/archive/2009/Nov-09.html" target="_blank">http://tirania.org/blog/archive/2009/Nov-09.html</a><br>
&gt;<br>
&gt;    And I am wondering: since MemoryStream is one of these sources of<br>
&gt; problems, we could replace this implementation with MindTouch&#39;s<br>
&gt; ChunkedStream.<br>
<br>
</div>Probably stupid question: why is a compacting garbage collector<br>
actually needed?  C programs have survived for a *long* time without<br>
any ability whatsoever to compact memory, simply by carefully<br>
optimizing their allocation algorithms to avoid fragmentation.  Is the<br>
mono allocator very non-optimal in this respect?<br></blockquote><div><br>One of the causes is that in a garbage collected language you allocate when you need something and discard it when you&#39;re done. If you do this with large buffers which are pinned in memory and have just the wrong allocation pattern, you can bloat your memory usage. There&#39;s nothing mono can do in this case as essentially it&#39;s the user causing the bloat.<br>
<br>One thing you can do is keep a cache of buffers yourself and re-use them. For example if your application allocates 10 chunked memory streams a second and Dispose () them when you&#39;re done, you could add/remove the &#39;chunks&#39; from a cache. This way you&#39;d only ever allocate 10xsizeof (chunked stream) bytes of memory and you&#39;d constantly re-use them.<br>
<br>Alan.<br><br><br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
Like I said, I feel like this is a stupid question.  But I&#39;m curious<br>
about the answer, and neither your blog post nor the linked page on<br>
the sgen collector addresses it.<br>
<br>
Thanks,<br>
<font color="#888888"><br>
Avery<br>
</font><div><div></div><div class="h5">_______________________________________________<br>
Mono-devel-list mailing list<br>
<a href="mailto:Mono-devel-list@lists.ximian.com">Mono-devel-list@lists.ximian.com</a><br>
<a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>
</div></div></blockquote></div><br>