クラスのファイナライズ中に「this」を格納するコードをどのように定義できますか? ガベージ コレクターはどのように動作する必要がありますか (どこかで定義されている場合)。
私の考えでは、GC はクラス インスタンスを複数回ファイナライズする必要があり、次のテスト アプリケーションは "66" を出力しますが、ファイナライザーは 1 回だけ実行されるため、アプリケーションは "6" を出力します。
数行のコード:
using System;
namespace Test
{
class Finalized
{
~Finalized()
{
Program.mFinalized = this;
}
public int X = 5;
}
class Program
{
public static Finalized mFinalized = null;
static void Main(string[] args)
{
Finalized asd = new Finalized();
asd.X = 6;
asd = null;
GC.Collect();
if (mFinalized != null)
Console.Write("{0}", mFinalized.X);
mFinalized = null;
GC.Collect();
if (mFinalized != null)
Console.Write("{0}", mFinalized.X);
}
}
}
私がやろうとしているのは、ファイナライザーがインスタンス メモリをどのように管理するかを理解することです。私のアプリケーションでは、さらなる処理のためにインスタンス参照を再利用することが望ましい場合があります。
ファイナライザーがメモリを「解放」しないことは明らかです (少なくとも私のテスト アプリケーションでは)。メモリ チャンクを他の目的に再利用できますか? それとも解放された?そうでない場合、それはメモリリークか何かでしょうか?
今、私は以前より混乱しています。