ラージオブジェクトを証明するためにC#のコードを使用する方法の第二世代のヒープの先頭に割り当てられるのでしょうか?

以上オブジェクトバイト85,000に等しい大きな物体を指します。私は、GCが得られた静的クラスメソッドを使用するためにここにいる得るために他の方法を全く考えていなかった、このオブジェクトの正確な方法を得ることを期待していなかった大きなオブジェクトではありません

バイト [] bigArray = 新しい バイト [ 85000 ]; 
Console.WriteLineを(GC.GetGeneration(bigArray))。

出力:


 それは2つのだけの世代でオブジェクトを見ることができますGC.GetGeneration(Object)を使用して見ることができますが、それは実際にはない大きなオブジェクトは、あなたが見ていくつかのパフォーマンス・チューニング・ソフトウェアを使用することができるかどうかに依存します。本明細書で使用される場合、CLRProfiler図、次のように:

私たちは、バイトが[] LOHに割り当てられている割り当てられました。これは、実際に85,000バイトのサイズに等しいがヒープに直接ラージ・オブジェクトのオブジェクトに割り当てられている、ことを示しています。


 最後に、あなたがテストに次のコードを使用できないことに注意してください:

ラージ・オブジェクトの文:

パブリック クラスBigObject 
{ 
    公共の バイト [] bigArray = 新しい バイト [ 85000 ]。

    BigObject()
    { 
        Console.WriteLineを(" BigObjectを収集します!" ); 
    } 
}

コールの上端部:

BigObject bigObj = 新しいBigObject(); 
bigObj = nullを

Console.WriteLineを(" 0代、1代回收" )。
GC.Collect(1 )。

Console.ReadKey();

出力:

これは、GC.Collectが0に設定されている場合でも、このBigObjectを回復することがここで見ることができ、リサイクルの同世代です。このエラーは誤解であり、85,000バイトを一緒に回収されるBigObjectそこbigArrayを回復するが、BigObject後に回収されない  bigArray 又はヒープ内に存在する大きなオブジェクト実際には、開始する時間は、メモリを割り当てるBigObjectの下に示されています

 

おすすめ

転載: www.cnblogs.com/Jeffrey-Chou/p/12578096.html