これは、名義的な方法で物を洞察する代わりに、&を呼び出すのではなく、リフレクション/ジェネリック/生成コードを使用していつでも代理人を準備できることを意味します。
たとえば、オブジェクトをシリアル化するメソッドを記述する必要があるとします。
public class Serializer<T>
{
void Serialize(Stream stream, T value)
{
if (object.Equals(value, null)) { return; }
var type = typeof(T);
if (type == typeof(int)) { ... return ; }
if (type == typeof(string)) { ... return; }
var properties = type.GetProperties();
foreach (property in properties)
{
var value = property.GetValue(value);
...
}
}
}
この実装では、各呼び出しで反射を大量に使用して(この場合は)LINQの式を使用してデリゲートを作成するために使用され、一度だけヒットします
public class Serializer<T>
{
static private readonly Action<Stream, T> m_Serialize;
static Serializer()
{
Serializer<T>.m_Serialize = Expression.Lambda<Action<Stream, T>>(... [a lot of reflection here] ...).Compile();
}
public void Serialize(Stream stream, T value)
{
Serializer<T>.Serialize(stream, value);
}
}
反射により変更することができます。
その記事をリンクできますか? –
私は私の会社の本でこれを読んでいます。それはフレームワークを構築する方法のようでした。 「直接呼び出しラッパーのバイトコード」という言葉を検索すると、stackexchangeにもコメントがあります。 2番目のコメントでは、誰かがこの技術をも言及されたhttp://softwareengineering.stackexchange.com/a/123959。 – umtc
基本的に、高度に最適化されたアスペクト指向のフレームワークを書くことを意味します。私はそれをお勧めしません、あなたのアプリケーションをロードするためにはるかに時間がかかるだろうと私はあなたが大幅にパフォーマンスを向上させることができるとは思わない。いくつかのプロファイリングテストを行い、コードがどこで遅くなるかを見てください。 –