Como utilizar el código C # para probar un objeto grande será asignado al inicio de la segunda generación del montón?

Se refiere a un objeto grande es mayor que o igual a 85.000 bytes objetos. Estoy aquí para utilizar un método de clase estática se obtuvieron GC, no tenía idea de otros métodos para obtener, también no esperar para obtener el método exacto de este objeto no es un objeto grande .

byte [] bigArray = nuevo  byte [ 85000 ]; 
Console.WriteLine (GC.GetGeneration (bigArray));

salida:


 Se puede ver usando GC.GetGeneration (Objeto) sólo puede ver el objeto en dos generaciones, pero no es realmente depende de si un objeto grande, puede utilizar algún software de optimización del rendimiento para ver. Como se usa en el presente documento, vista CLRProfiler, como se muestra a continuación:

Nos asignaron byte [] se asigna en la LOH. Esto indica que, en efecto igual al tamaño de 85.000 bytes se asignan a un objeto directamente grandes objetos en el montón.


 Por último, cabe destacar que no se puede utilizar el siguiente código para probar:

Grandes objetos declaración:

público  de clase BigObject 
{ 
    pública  byte [] = bigArray nuevo  byte [ 85000 ]; 

    ~ BigObject () 
    { 
        Console.WriteLine ( " BigObject recopilada! " ); 
    } 
}

El extremo superior de la llamada:

BigObject bigObj = nuevo BigObject (); 
bigObj = nulo ; 

Console.WriteLine ( " 0代, 1代回收" ); 
GC.Collect ( 1 ); 

Console.ReadKey ();

salida:

Se puede ver aquí BigObject ser recuperado, incluso si el GC.Collect se establece en 0 es la misma generación de reciclaje. Este error es un malentendido, y no recupera los BigObject en ella bigArray 85.000 bytes se recuperan juntos, pero se recuperaron después de BigObject  bigArray  o grandes objetos presentes en el montón . De hecho, el tiempo de inicio se muestra a continuación BigObject asignar memoria :

 

Supongo que te gusta

Origin www.cnblogs.com/Jeffrey-Chou/p/12578096.html
Recomendado
Clasificación