Possible Duplicate:
Weak references
What is this thing for?
It seems to be a way to create an object that the GC can collect early and if it gets collected early, I am supposed to just re-create it. That sounds to me like caching, but other StackOverflow questions say that this is a lousy cache strategy because the GC in practice will GC your object very eager and fast, (another Q that says weakreference make poor caches) sort of like using ASP.NET's Cache and setting it to a very low cache eviction time limit.
Background: I was recently reading CLR code for TraceSource. In the constructor, the 1st thing that happens is that a WeakReference(this) is added to a static dictionary. Oddly it is only ever used in the Refresh method when TraceSource re-reads the config file for each TraceSource in the dictionary of weak references, but only if it hasn't already been GC'd. And another StackOverflow question indicates this causes memory leaks.
So I've been reading about WeakReferences ever since and getting more and more confused.