Alex Rivera | Logout

WeakReference implementation in .NET

Asked 2009-07-08T00:09:23.027
28

I understand and appreciate the usefulness of the System.WeakReference class in the .NET framework, but am curious as to the implementation details.

How is WeakReference implemented in .NET? MSDN discusses the usage of WeakReference in detail, but has little details that I've seen on how this works under the hood.

How does the CLR track the reference and know to null out the internal handle when the Target is collected, without preventing the GC? Does it require special handling in the CLR itself?

My main concern would be whether there are performance implications of using WeakReferences (especially if using many of them) that differ from those of using standard object references.

Edit
Report

1 Answer

14

You mentioned MSDN; have you already seen this article?

http://msdn.microsoft.com/en-us/magazine/bb985011.aspx

Also check out chapter 19 in "Applied Microsoft .NET Framework Programming" by the same author (Jeffrey Richter). The chapter is on garbage collection and has a section on WeakReference internals.

In general, if you're accessing a lot of Targets within WeakReferences, then there's a performance hit simply because the WeakRef does some work (mostly for thread safety) before returning the target. This is obviously not as cheap as using the object reference directly. On the other hand, you gain some performance when storing references to large objects, since the garbage collector has more options when memory considerations arise.

I've never tried to quantify this trade off, or know of any references here. Obviously it varies somewhat depending on the application.

answered 2009-07-08T00:51:35.493

Your Answer