Skip to content

Instantly share code, notes, and snippets.

@orangutanboy
Created November 30, 2012 20:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save orangutanboy/4178434 to your computer and use it in GitHub Desktop.
Save orangutanboy/4178434 to your computer and use it in GitHub Desktop.
WeakReference v WeakReference<T>
using System;
using System.Diagnostics;
using System.Xml;
namespace WeakReferenceDemo
{
class Program
{
static void Main(string[] args)
{
Debugger.Break();
OldWay();
NewWay();
Console.ReadLine();
}
private static void OldWay()
{
var myWeaklyReferencedObject = BuildXmlDoc();
var weakReference = new WeakReference(myWeaklyReferencedObject);
XmlDocument myXmlDoc;
// IsAlive method
if (weakReference.IsAlive)
{
// cast to type
myXmlDoc = (XmlDocument)weakReference.Target;
}
else
{
myXmlDoc = BuildXmlDoc();
weakReference = new WeakReference(myXmlDoc);
}
Console.WriteLine(myXmlDoc.OuterXml);
}
private static void NewWay()
{
var myWeaklyReferencedObject = BuildXmlDoc();
var weakReference = new WeakReference<XmlDocument>(myWeaklyReferencedObject);
XmlDocument myXmlDoc;
if (!weakReference.TryGetTarget(out myXmlDoc))
{
myXmlDoc = BuildXmlDoc();
weakReference = new WeakReference<XmlDocument>(myXmlDoc);
}
Console.WriteLine(myXmlDoc.OuterXml);
}
private static XmlDocument BuildXmlDoc()
{
const string xml = @"<thing name='foo'><innerthing name='bar' /></thing>";
var doc = new XmlDocument();
doc.LoadXml(xml);
return doc;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment