2017-06-22 15 views
7

私が理解する限り、コンパイル時に属性が生成されます(そうでなければ、relflectionを介して属性をロードすることはできません)。とにかく、属性が実行時にパフォーマンスの問題につながる特定のケースはありますか?C#属性を使用する場合のパフォーマンスの問題?

+1

いいえドットネットのフレームワークコード - _attributesはどこにでもあります:)_例:https://referencesource.microsoft.com/#System/compmod/system/collections/generic/linkedlist.cs,df5a6c7b6b60da4f – Mafii

+1

属性は次のようになります。それらにアクセスしようとするときにだけ遅くなる(属性)。それらを見ると、それらが作成されます。 – xanatos

+3

実行時に属性を取得する際に、明示的なコードが必要です。属性が必ずしも正しい解決法であるとは限りません。[こちらを読む](https://stackoverflow.com/a/3378482/17034)。 –

答えて

3

実行時に属性がパフォーマンス上の問題を引き起こす可能性があります。

あなたのプログラムがコード内の属性を過度に探している場合のみ。

属性は、何か探しているときにのみ役立ちます。あなたのクラスを[MyAwsomeAttribute]で飾り、何も探していない場合は、の性能差はありません。

パフォーマンスの違いは、所有する属性の数によって異なります。それが発見された場合。 (この能力を持っていると仮定すると、多くの属性は純粋にメタデータです)。

良い例は、WCFのカスタム動作属性であり、詳細かつ潜在的に複雑な実装方法です。

0

(MickyDの答えをテストするために)

でも、このコード、属性はcontructedされることはありませんので、本当に悪属性はまだ パフォーマンスへの影響を持っていないと。

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.WriteLine(new Foo().ToString()); 
     Console.ReadLine(); 
    } 
} 

[ThrowExceptionException] 
public class Foo 
{ 
} 

public class ThrowExceptionAttribute : Attribute 
{ 
    public ThrowExceptionAttribute() 
    { 
     throw new NotImplementedException(); 
    } 
} 

もちろん、属性を反映するとパフォーマンスに影響を与えることができます。 しかし、あなたの質問は、 "任意のコードを実行するとパフォーマンスに影響がありますか?"となります。

関連する問題