2017-11-21 10 views
-3

私はパブリック静的クラスとメンバを含むアセンブリを持っています。すべての静的メンバを初期化する静的コンストラクタを持っています。アセンブリをロードすると、すべてのメンバがメモリにロードされます。そうであれば、システムはメモリ例外を出さないでしょうか?スタティッククラスとメンバ

+0

クラスのメンバへの最初の呼び出しの後に初期化され、リソースがクラスにリフレクションを持たないと、それらは破棄されます。 – FCin

+0

@FCin静的フィールドはルートになっているため、ガベージコレクションされません。 *ガーベジコレクションされたものは決して "処分"されません - 最終的なものになるかもしれませんが、保証はありません –

+0

@MarcGravell静的オブジェクトのメモリは決して解放されませんか?彼らはそれに言及していないのに、記憶を占有するでしょうか? – FCin

答えて

3

a:静的コンストラクタは、アセンブリをロードするだけでロードされません。正確にはの場合はbeforefieldinitに依存し、静的フィールドが最初に触れたように見える場合 - しかし、「最初にアクセスする前のある時点で」それをカバーする必要があります。

b:OOMを引き起こすのに十分なメモリをスタティックコンストラクタで使用していますか?あなたがいるなら:はい!もしそうでなければ、いいえ!通常、答えは「いいえ」になります。静的なコンストラクタが外部データの読み込みなどの処理を行う場合は、静的なコンストラクタが間違っていると主張します。

注:静的コンストラクタが失敗すると、TypeInitializationExceptionと表示されます。元の原因は.InnerExceptionになります。

関連する問題