1

.NET リフレクションのパフォーマンスに関する多くの記事を見ましたが、メソッドを呼び出してリフレクションを使用してプロパティ値を取得すると、パフォーマンスにコストがかかり、直接呼び出しよりも約 2 倍から 3 倍遅くなることを知っています。

しかし、Type 情報と Attributes はどうでしょうか?
タイプのメタデータが .NET にキャッシュされていることは知っています...したがって、パフォーマンスにコストがかかることはなく、辞書やリストでの検索に似ていると思います (しかし、よくわかりません)...プロパティのタイプを確認し、プロパティ タイプのカスタム属性を取得するための情報を入力しますか?

属性に基づいて多くのことを機能させるのは悪い習慣と設計ですか?

私がやりたいことは、ページに登録する必要がある必要な JavaScript ファイルとクライアント コードに関する情報を取得するために、カスタム属性の多くのコントロールと型を検査する ASP.NET 用のインフラストラクチャを作成することです。

4

2 に答える 2

4

属性に基づいてアーキテクチャを構築することは悪いことではありませんが、柔軟性を維持したい場合は、インターフェイス/実装を導入して、これらの情報をプログラム的に属性に依存せずに提供し、属性に基づいてデフォルトの実装を定義する必要があります。

属性の読み取りは遅くありませんが、マイクロ最適化を気にする場合は、次のように独自のキャッシュを作成できます。

static public class Metadata<T>
{
    static public readonly Type Type = typeof(T); //cache type to avoid avcessing global metadata dictionary

    static public class Attribute<TAttribute>
        where TAttribute : Attribute
    {
            static public readonly TAttribute Value = Metadata<T>.Type.GetCustomAttributes(Metadata<TAttribute>.Type).SingleOrDefault() as TAttribute; 
    }
}

//usage
Metadata<MyType>.Attribute<MyAttributeType>.Value; //exception if more then once and null if not defined.
于 2015-01-06T08:08:18.637 に答える
2

ユースケースを直接プロファイリングすると、最良の答えが得られます。結局のところ、少し反省することは悪くありません。反省点は多いかもしれません。Stopwatchクラスを使用して、代替案の時間を計ります。

于 2013-07-29T20:52:46.877 に答える