0

GC に関する 3 冊の本を読んでいると、いくつかの奇妙な事実に気づきます。

CLR 経由の C#

CriticalFinalizerObject: CLR は、このクラスとその派生クラスを非常に特別な方法で扱います。

ここに画像の説明を入力

何 ???

「メソッドをコンパイルするのに十分なメモリが見つかりませんか? 」私見-コードはすでにコンパイルされているはずです...いいえ?

私がc#コードを書いているとき - コード全体が実行前にILにコンパイルされます...いいえ?しかし、テキストによると - at RUNTIME - 彼はコンパイルに不十分なメモリを見つけるかもしれません...

ヘルプ ?

4

3 に答える 3

2

「コンパイラ」のバックエンドだと思います。ILからマシンコードへ。

于 2012-04-06T10:53:58.737 に答える
1

コンパイラとは、ファイナライザ メソッドを積極的にコンパイルし、実行直前にコンパイルを遅らせないことを目的とした JIT コンパイラです。

その背後にあるより深い理由は、すべての通常のファイナライザーが実行された後、アプリケーションのシャットダウン中にこれらのファイナライザーが呼び出されることです。ただし、CLR は保留中のすべてのファイナライザーを 2 秒のタイムアウトで実行します (少なくとも .NET 2.0 ではそれ以降チェックされていません)。次に、重要なファイナライザーが実行されます。

重要なファイナライザーは、たとえば、いずれにせよ閉じる必要があるハンドルなど、めったに使用されません。ただし、それらを使用して、すべてのファイナライザーが実行されるまでリソースを開いたままにして、ファイナライザー内でもトレースを有効にすることもできます。

于 2012-04-06T11:21:42.607 に答える