2011-12-26 14 views
0

特定の操作が完了したときに電子メール通知を送信するWebサイトを構築しています。現在のところ、メッセージなどを含むデータベースレコードを参照するパラメータを持つ特定の領域で呼び出される汎用通知関数があります。関数名を指定してトリガ関数を呼び出す

このように動的にトリガーするので、ウェブサイトのさまざまな領域でトリガーを追加/削除すると、コードビハインドの変更は必要ありません。私はリフレクションと名前空間/関数を使ってデータベースからロードされたトリガーを呼び出すことを考えていましたが、パフォーマンスに大きな影響を与えると思います。

+0

「重要なパフォーマンスへの影響」があると思いますか? –

+0

私は、リフレクションを介して適切なソリューションを実装する方法がわからず、トリガを実行する必要がある機能を確認するためにかなりの数の追加チェックがあると想定していることから懸念しています。それについてもっと考えてみると、私の懸念はおそらく非合理的であることがわかります。 –

答えて

1

Reflectionには、特に最初にルックアップを実行した後に関数ポインタをキャッシュすることを考慮する場合、パフォーマンスに大きな影響はありません。

これは、単純なスパイクで、コンパイルや仕事が、正しい道にあなたを取得する必要はないことがあります。

var type = Type.GetType("System.DateTime"); 
var parser = type.GetMethod("Parse"); 
Console.WriteLine(parser.Invoke(null, "2012-01-01 12:00")); 

パーサーはMETHODINFOオブジェクトで、後で使用するためにキャッシュすることができます。呼び出しを呼び出すことは、DateTime.Parseを直接呼び出すよりもパフォーマンスが悪いものではありません。私が推測しなければならないのは、Type.GetTypeの呼び出しが最も遅いということです。それでも、多くの時間を話すわけではありませんが、間違いなくmsスケールです。

もう少し情報を与えることができれば、誰かがあなたをより良い方向に向けることも可能です。多少のDIやIoCの情報が関係するかもしれません。

+1

'呼び出しを呼び出すことは、DateTime.Parseを直接呼び出すよりもパフォーマンスが悪いことはありません.'試しましたか?私はして、 'Invoke'は2倍遅くなっています。しかし、これは@ Eclyps19がどのような規模で反射 –

+1

@ L.Bを使用することを避けるべきであるという意味ではありませんか?秒、ミリ秒、ナノ秒ですか?私は少し言い直してみましょう、彼はWebアプリケーションを書いています、反射は、パフォーマンスになると、彼らの心配の中で最も少なくなければなりません。 – neouser99

+0

'あなたはウェブアプリケーションを書いていますが、パフォーマンスはあなたの心配ではありません。しかし、私はちょうど反射が常にダイレクトコールよりも遅いことを指摘したいと思います。試してみて –