Hi Rodrigo,<br><br>Yes, I release memory on finalizers (unfortunately I cannot use Disposable objects). At the moment, I can provide you a binary test, if you can reproduce the behavior, and it is needed, I can try to exact the relevant code for the procedure and provide source code, but it takes time.<br>
<br>you can download the test here:<br><br><a href="http://fairmat.com/tests/TestGC.tar.gz">http://fairmat.com/tests/TestGC.tar.gz</a><br><br>and run<br>mono --gs=bohem TestGC.exe<br><br>the test in widows and osx uses constant memory, while in linux you should obtain the following output:<br>
 
<br># date: 233<br># Maturity: 30<br>DSOP Initialize time:00:00:09.6344820<br>Live 186627 Live 349020 Live 490713 Live 549690 Live 579092 Live 691041 Live 832648 Live 978625 Live 1055648 Live 1233333 Live 1378727 Live 1586629 Live 1780660 Live 2035369 Live 2297367 Live 2504015 Live 2748390 Live 3004210 Live 3264366 Live 3508553 Live 3741829 Live 4015918 Live 4280187 Live 4524532 Live 4781589 Live 5041975 Live 5264760 Live 5529215 Live 5764582 Live 6026585 Live 6221326 Live 6460175 Live 6767039 Live 7014641 Live 7243492 <br>
<br><br> the test program continue to evaluate  a function  and writes an 
estimation of live instances every N evaluations, which are always 
increasing in this case,<br><br>Thanks for looking at it,<br>Matteo<br><br><br><br><div class="gmail_quote">On Thu, Feb 17, 2011 at 8:13 PM, Rodrigo Kumpera <span dir="ltr">&lt;<a href="mailto:kumpera@gmail.com">kumpera@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">Hi Matteo,<div><br></div><div>I suppose you release memory on finalizers. Sgen has a longer cycle</div>
<div>to finalize objects than boehm. On why extra retention is happening on</div><div>linux is strange and could be a bug. Can you provide a test case that</div>
<div>shows this behavior?</div><div><div></div><div class="h5"><div><br><br><div class="gmail_quote">On Fri, Feb 11, 2011 at 6:08 PM, matteo tesser <span dir="ltr">&lt;<a href="mailto:matteo.tesser@gmail.com" target="_blank">matteo.tesser@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">Hi Rodrigo,<br>
OK, taking or not taking into consideration memory pressure is a<br>
runtime&#39;s implementation choice: if you consider memory pressure, the<br>
runtime will be more reactive to memory usage, in the latter case no,<br>
but unreferenced objects should be freed sooner or later.<br>
<br>
I did an additional test: I counted the live object instances of the<br>
object type which references the unmanaged resources over time: while<br>
in windows and os x the live instances oscillate  between 10K and 60K,<br>
 in  linux the live instances arrived to 20 milions. it seems that the<br>
GC does not realize that so many objects  have been allocated. Are 20<br>
milions objects  still a number that should not trigger the GC ?<br>
<br>
Probably the problem is not related to unmanaged memory but the<br>
particular structure of my problem highlights a defect.<br>
<font color="#888888"><br>
Matteo<br>
</font><div><div></div><div><br>
<br>
<br>
On Fri, Feb 11, 2011 at 3:34 PM, Rodrigo Kumpera &lt;<a href="mailto:kumpera@gmail.com" target="_blank">kumpera@gmail.com</a>&gt; wrote:<br>
&gt; Mono doesn&#39;t take memory pressure into account. This is probably<br>
&gt; what&#39;s happening.<br>
&gt; On Fri, Feb 11, 2011 at 3:54 PM, matteo tesser &lt;<a href="mailto:matteo.tesser@gmail.com" target="_blank">matteo.tesser@gmail.com</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Hello,<br>
&gt;&gt;<br>
&gt;&gt; I have a concurrent programming test  which during 5-10 minutes<br>
&gt;&gt; creates and releases a  lot of objects which use unmanaged memory.<br>
&gt;&gt; Every managed object,  respectively  allocates/deallocates the<br>
&gt;&gt; unmanaged memory using  Marshal.AllocHGlobal and Marshall.FreeHGlobal<br>
&gt;&gt; methods  and uses GC.AddMemoryPressure/GC.RemoveMemoryPressure to tell<br>
&gt;&gt; to  the garbage collector the presence of the additional memory.<br>
&gt;&gt;<br>
&gt;&gt; I experienced some memory problems on linux,  so I did several tests:<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; 1)  In linux machine with openSuse 11.3 64bit dual core with  mono<br>
&gt;&gt; 2.8.2,  the program launched with mono --gc=sgen eats 4GB of RAM in<br>
&gt;&gt; about two minutes (see attached screenshot).<br>
&gt;&gt; If I launch the test by specifying the use of  boehm gc,  the memory<br>
&gt;&gt; is still consumed but at smaller rate.<br>
&gt;&gt; I tried the test also with mono 2.10p3 and the behavior is the same<br>
&gt;&gt; (also using MONO_GC_PARAMS=stack-mark=precise)<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; 2) In Windows/.NET the memory footprint  of the program is constant on<br>
&gt;&gt; time:  80MB,<br>
&gt;&gt; 3) in a dual core mac os x ( with mono 2.10p2) the behavior is the<br>
&gt;&gt; same as windows.<br>
&gt;&gt;<br>
&gt;&gt; 4) In a Virtual Machine with  linux openSuse 11.3 32bit  and 1<br>
&gt;&gt; processor  , mono 2.10p3 the test works fine: the memory footprint  is<br>
&gt;&gt; constant at 50MB<br>
&gt;&gt;<br>
&gt;&gt; My conclusion is that the problem is restricted to the linux /<br>
&gt;&gt; multi-thread case.<br>
&gt;&gt; Are you aware of such issues on sgen?<br>
&gt;&gt;<br>
&gt;&gt; I tried to build-up a simple code reproducing the problem but I did<br>
&gt;&gt; not managed to do it with a simple test case, in case are you<br>
&gt;&gt; interested in a binary test case?<br>
&gt;&gt;<br>
&gt;&gt; Thanks,<br>
&gt;&gt; Matteo<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; Mono-devel-list mailing list<br>
&gt;&gt; <a href="mailto:Mono-devel-list@lists.ximian.com" target="_blank">Mono-devel-list@lists.ximian.com</a><br>
&gt;&gt; <a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br>