3

多くの冗長なアクセサーを持つ生成されたクラスがあるとします。それらは単なるアクセサーであり、フィールドではありません。彼らはどこにも呼ばれません。彼らはただそこに座って冗長で醜いです。

例えば:

public class ContrivedExample
{
    public int ThisOneIsUsed { get; set; }

    public int ThisOneIsNeverCalled0 { get { /* Large amounts of logic go here, but is never called. */ } }
    public int ThisOneIsNeverCalled1 { get { /* Large amounts of logic go here, but is never called. */ } }
    public int ThisOneIsNeverCalled2 { get { /* Large amounts of logic go here, but is never called. */ } }
    //...
    public int ThisOneIsNeverCalled99 { get { /* Large amounts of logic go here, but is never called.*/ } }
}

ContrivedExample c = new ContrivedExample() { ThisOneIsUsed = 5; }

私が考えることができる唯一のオーバーヘッドは、.DLL が大きくなることです。実行時のペナルティがゼロになることを期待しています。

これにより、他のオーバーヘッドが発生しますか? どんな種類の小さなオーバーヘッドでも?

4

1 に答える 1

7

測定可能なランタイム オーバーヘッドが発生する可能性はほとんどありません。いずれにせよ、パフォーマンスの問題であるため使用状況を測定し、疑わしい場合はケースに応じて決定してください。

参照されていないメソッドは、JIT によってコンパイルされることも、実行時の直接的なオーバーヘッドを引き起こすこともありません。

クラスのメタデータは大きくなります(前述のアセンブリのサイズとともに)。

クラスが多くのリフレクションを含むコードで使用されている場合、間接的な影響を受ける可能性があります。また、コードが同じクラスを繰り返しリフレクションする場合、それ自体が間違っている可能性があります。

于 2012-05-09T17:01:55.860 に答える