Created
November 30, 2012 20:39
-
-
Save orangutanboy/4178434 to your computer and use it in GitHub Desktop.
WeakReference v WeakReference<T>
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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