5

メモリ割り当ての観点から、ステートレス静的ユーティリティ クラスとステートレス非静的ユーティリティ クラスの作成に違いはありますか? 私の理解では、GCヒープにオブジェクトが割り当てられないため、静的クラスの方が実際には優れている可能性があります。高周波ヒープにはメソッド テーブルのみが作成されますが、非静的クラスの場合、HF ヒープのメソッド テーブルと共に GC ヒープにオブジェクトが作成されます。それを確認するために皆さんからの助けが必要です。他の考慮事項が欠けている場合は教えてください.

4

1 に答える 1

5

はい。メソッドがすべて静的である場合、マネージド ヒープにインスタンスは存在しません。呼び出すたびに、型を直接参照し、ヒープにメモリを割り当てずにそのメンバーにアクセスします。

インスタンス クラスがある場合、インスタンスを作成するたびに、ヒープにコストが発生します。参照も保持していない場合は、CLR のジェネレーション 0 でチャーンが高くなります。これは、これらの呼び出しを行うために大量のオブジェクトを作成することを前提としています。

もちろん、シングルトン パターンを実装している場合は、オブジェクトのインスタンスを1 つだけ実装するため、コストは小さくなります。

ただし、これはマイクロ最適化であるため、すべて意味がありません。この機能を実行するために法外な量のこれらのオブジェクトを作成し、プロファイリングによって実際に問題があると判断されない限り、それは維持するのが最も簡単なものであるべきです。

ただし、メソッドがステートレスであり、既存の型を操作するように自然に見える場合は、通常、拡張メソッドを記述します。これは静的呼び出しですが、インスタンス呼び出しのように見えます。これは、タイプから直接静的メソッドを呼び出すよりもコードの流れがはるかに優れている場合があります (特に、流暢なインターフェイスを設計できる場合) 。 .

于 2012-08-15T19:41:05.970 に答える