2011-01-18 15 views
12

Quando analizziamo cumuli di memoria, dopo 4 tipi di GC ofhandleswe generalmente incontrare:Qual è il concetto alla base di "Handle Pinned GC"?

  1. debole: - Maniglia GC debole non impedirà l'istanza corrisponde venga garbage collection. Example, used by the System.WeakReference class instances.

  2. Normale: - Un normale handle del GC impedisce che l'istanza corrispondente venga raccolta dai dati obsoleti. Example, used by the instances of strong references.

  3. RefCounted: - Una maniglia di riferimento GC contato viene utilizzato internamente dal runtime, example, when dealing with COM interfaces.

  4. Pinned: - Perché abbiamo bisogno di questo tipo di GC gestire? È solo per evitare il movimento di tale istanza in memoria o is there any other notion behind this? I want to know the notion behind Pinned GC handle(with an example).

Edited la risposta di Itay: - Ho una non vuoto nell'edificio- DiffCell [] [] che è legato a una griglia di dati in WPF. Quando viene chiusa la finestra su cui è presente tale griglia, sul mucchio vedo Pinned GC maniglia punta a questo vuoto DiffCell matrice attraverso oggetto [] (vedi fotografia). I am not using any unsafe code. I am just setting ItemsSource of data grid to null before closing that window. So my question is who does pin this array on heap and why?

alt text

risposta

7

Abbiamo bisogno di questo nel caso in cui usiamo i puntatori.
Immagina di dichiarare un puntatore a una posizione di memoria e non devi inserirlo.
Il GC a volte sposta i blocchi di memoria in altri luoghi in modo che il puntatore non sia più valido.

ad esempio:

public unsafe void DoSomething(byte b) 
{ 
    byte * bp = &b; 
} 

questo non verrà compilato perché non hai risolvere posizione di memoria che contiene il byte.
Al fine di pin è possibile utilizzare:

public unsafe void DoSomething(byte b) 
{ 
    fixed(byte * bp = &b) 
    { 
     //do something 
    } 
} 
+0

Grazie Itay! Si prega di vedere la domanda modificata e fammi sapere i vostri commenti su di esso. –

+0

Non so davvero come funzionano WPF e binding, quindi temo di non poterti aiutare qui. –

3

Non dimenticate GCHandle che supporta pinning oggetti (e recuperando l'indirizzo di un IntPtr). Gli oggetti appuntati non sono esclusivi del codice non sicuro (la dichiarazione fissa).

Problemi correlati