私は最近、GC.AddMemoryPressureを使用する必要がありました。それは、メモリ圧力を引数として追加するオブジェクトを受け入れないという奇妙なものです。私は、それがランタイムに非常に密接に結びついているので、this
ポインタがメソッドに渡されるいくつかのメカニズムがあると思います。私の質問は3つです:GC.AddMemoryPressure()はどのオブジェクトにメモリ圧迫を加えるべきかを知っていますか?
- このポインタはどのようにしてメソッドに渡されますか?
- 静的メソッドから呼び出すときに例外がスローされないことに気付きました。この場合、どうなりますか?
- なぜGC.SupressFinalizeやGC.ReRegisterForFinalizeなどの他のGCメソッドは、このメソッドが必要でないオブジェクト引数を取るのですか?
ああ、私は、このメモリ圧迫が管理されていないメモリを割り当てるオブジェクトに関連付けられていると仮定していました。つまり、GCはコレクションのメモリ負荷が高いオブジェクトに優先順位を付けます。 – Grokys
"管理されていないメモリを割り当てた後にAddMemoryPressureメソッドを呼び出す"。割り当ての前にメソッドを呼び出す方が理にかなっていますか?そうしないと、ネイティブ/アンマネージコードは、ガベージコレクタがメモリを必要とするネイティブ/アンマネージコードについて知らないため、割り当て中に不必要にメモリが不足する可能性があります。 –
@ChieltenBrinke:アロケーションの直前に*コールすると、GCの時間をとらえられないと思います。 –