2011-08-13 3 views
7

MVCビューを書く際に、HELPヘルパーメソッド(EditorFor/LabelForなど)をたくさん呼びます。これらの拡張機能は、シーンの裏側で多くの反射を使用します。ルーティング、モデルバインド、検証、EF操作などがすべてリフレクションによってどのように処理されるかといっしょに、パフォーマンスがどれほど痛いのだろうか?MVCフレームワークは、リフレクションを多用することによって継承される低性能を避けるために何をしますか?

私はMVCフレームワークがそのような大規模でリフレクションを使用することの影響に取り組むために何をしているのかを知りたいと思います。

キャッシングを実行する必要があると確信していますが、正確に何が行われるかは、優れた学習体験であり、何らかの生産性の向上のために大きなパフォーマンスを損なうことはないと確信しています。

+0

ます(http:// MSDN

そしてここでは、MVCアプリケーションのパフォーマンスのチューニングのスティーブン・スミスからgreateのビデオですMicrosoft.com/jp/us/library/bb345362.aspx)。 –

+1

リフレクションの使用は必ずしも悪いパフォーマンスを意味するものではありません - この素晴らしい[MSDN Magazineの記事](http://msdn.microsoft.com/en-us/magazine/cc163759.aspx)を参照してください –

+0

パフォーマンスは相対的です。リフレクションは早期バインドメソッド呼び出しよりも遅くなりますが、正しく使用されキャッシュされると、適切に使用されるとアプリケーション全体を著しく遅くするほど遅くなりません。 –

答えて

10

コメントとしてmarc_sが言ったように、リフレクションを使うことは必ずしも悪いことではありません。私はMVCの多くのパフォーマンス調査を担当しており(さらに私はa few blog posts on MVC performanceと書いています)、実際のアプリケーションで最大の問題はデータベースアクセスです。それ以外のものはすべて比較対象となります。

しかし、私たちは、コアフレームワークを可能な限り無駄にしないようにして、適切な場所にキャッシュするようにしています。これには、ビューファイルのルックアップ、モデルラムダ式などが含まれます。これについて学ぶ最も簡単な方法は、おそらくソースコードを見て、Dictionary<Type, T>MemoryCache、またはHttpContext.Cacheを使用する場所を見つけることです。

もう一つの方法は実際にはプロファイラの下でMvcアプリケーションを実行することですが、これはもう少し高度なトピックです(検索するとヒットします)。

最終的には、私たちが正しいことをしていることを信じなければなりません:)すでに多くのperf問題を最適化しており、残りの反射の使用法はそれほど大きな影響を与えません。私は専門家午前ませんが、私は[ダイナミック式ツリーをコンパイル]を頻繁に使用があるとしhttp://channel9.msdn.com/Series/mvcConf/mvcConf-2-Steven-Smith-Improving-ASPNET-MVC-Application-Performance

+0

あなたの答えに感謝します。これは、ビデオが素晴らしいものであることを保証すると同時に、パフォーマンスのさまざまな側面にも触れています。 –

関連する問題