i saw the bug you have opened, the behavior is pretty interesting, which is out of my expectation. thank you for the information.
.Hzj_jie > Subject: Re: [Mono-dev] a set of tests to find out the difference between > .Net and Mono implementation > From: jonpr...@vt.edu > Date: Tue, 16 Sep 2014 12:31:37 -0400 > CC: mono-devel-list@lists.ximian.com > To: hzj_...@hotmail.com > > On Sep 16, 2014, at 6:10 AM, 何子杰Hzj_jie <hzj_...@hotmail.com> wrote: > > 1. GC > > thought GC.Collect() does not guarantee all the inaccessible objects are > > finalized and reclaimed, .Net implementation usually be able to delete all > > the inaccessible objects. > > impacts, delegate_pinning_test, it make sure the delegate / event in .net > > will release the object after itself has been released. > > weak_pointer_test, weak_pointer is a simple wrapper of WeakReference, which > > is strong-typed. > > event_disposer_test, event_disposer is a strong-typed pointer, which > > provide disposing event when disposing. > > lifetime_binder_test, lifetime_binder is a collection to avoid the object > > to be finalized. > > Developers need to write tests for finalizers, and writing tests for > finalizers can be tricky for a variety of reasons. As such, it is quite > possible that a GC-related test that "works" on .NET won't work on Mono w/o > change. > > If you want to test your class' finalizer, then you need to use two threads + > WeakReference: > > WeakReference r = null; > var t = new Thread (() => { > var v = new ClassToTest (); > r = new WeakReference (t); > }); > t.Start (); > t.Join (); > GC.Collect (); > GC.WaitForPendingFinalizers (); > > // can now [0] check r.IsAlive, etc. > > The reason you create the instance + WeakReference on another thread is > because Mono's GC will *conservatively* scan the thread's heap looking for > valid references. By using a new thread *which exits*, the conservative stack > scan will "skip" the exited thread, and thus won't find any valid references > to the allocated instance. This in turn allows you to use the WeakReference > to determine if the instance has in fact been collected. (Or not, if your > ClassToTest registers itself with some static collection or something...) > > - Jon > > [0]: https://bugzilla.xamarin.com/show_bug.cgi?id=20503 >
_______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list