|
Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
|
Tradução
Original
|
WeakReference Classe
Assembly: mscorlib (em mscorlib. dll)
using System; using System.Timers; class Program { static void Main(string[] args) { // Creating an instance // of an object creates // a strong reference. ClassA objA1 = new ClassA(); // Create a short weak reference to the object. // Specify true for a long weak reference. WeakReference wr = new WeakReference(objA1, false); // Set the target of the // weak reference to the object. wr.Target = objA1; // Remove the strong reference // the application has to the object. objA1 = null; if (objA1 == null) { Console.WriteLine("After setting objA1 to null: objA1 is null."); } // Set a timer to set a strong reference // and to force garbage collection. System.Timers.Timer aTimer = new System.Timers.Timer(); // Set interval to 5 seconds. aTimer.Interval = 5000; aTimer.Enabled = true; // Counter for tracking. int count = 1; // Anonymous method. aTimer.Elapsed += delegate(object sender, System.Timers.ElapsedEventArgs e) { if (objA1 == null) { Console.WriteLine("objA1 is null"); // Adjust the count higher if // you want to allow more time // for automatic garbage collection. if (count == 5) { // Uncomment next line to set a strong reference. //objA1 = (ClassA)wr.Target; GC.Collect(); } if (count == 8) { // This code is only reached if // the weak reference is long. objA1 = (ClassA)wr.Target; } if (wr.IsAlive == false) { // Object is collected and // all references terminated. Console.WriteLine("Object collected"); aTimer.Stop(); } else { Console.WriteLine("count {0}, still alive. long weak reference: {1}", count.ToString(), wr.TrackResurrection.ToString()); count++; } } else { // A strong reference is established // and prevents it being collected. Console.WriteLine("Strong reference applied"); aTimer.Stop(); } }; } } public class ClassA { public ClassA() { } ~ClassA() { Console.WriteLine("Finalized."); } void MakeSomeGarbage() { // Create objects and release them // to fill up memory with unused objects. Version vt; for (int i = 0; i < 10000; i++) { vt = new Version(); } } } // -------- Code example output -------- // // A short weak reference creates // the following output: // ------------------------------------ // After setting objA1 to null: objA1 is null. // objA1 is null // count 1, still alive. long weak reference: False // objA1 is null // count 2, still alive. long weak reference: False // objA1 is null // count 3, still alive. long weak reference: False // objA1 is null // count 4, still alive. long weak reference: False // objA1 is null // Object collected // Finalized. // ------------------------------------ // // // A long weak reference creates // the following output, being // ressurected at count 5. // ------------------------------------ // After setting objA1 to null: objA1 is null. // objA1 is null // count 1, still alive. long weak reference: True // objA1 is null // count 2, still alive. long weak reference: True // objA1 is null // count 3, still alive. long weak reference: True // objA1 is null // count 4, still alive. long weak reference: True // objA1 is null // count 5, still alive. long weak reference: True // Finalized. // objA1 is null // count 6, still alive. long weak reference: True // objA1 is null // count 7, still alive. long weak reference: True // objA1 is null // count 8, still alive. long weak reference: True // Strong reference applied // ---------------------------------- // // // A weak reference creates // the following output with a // strong reference applied // at count 5. // ---------------------------------- // After setting objA1 to null: objA1 is null. // objA1 is null // count 1, still alive. long weak reference: False // objA1 is null // count 2, still alive. long weak reference: False // objA1 is null // count 3, still alive. long weak reference: False // objA1 is null // count 4, still alive. long weak reference: False // objA1 is null // count 5, still alive. long weak reference: False // Strong reference applied // ------------------------------------ //
- SecurityPermission
a capacidade chamar código não gerenciado. Exigem valor: InheritanceDemand; Permission value: UnmanagedCode