4

Reflection が非常に高価なエンジンであることはわかっています。それにもかかわらず、ASP.NET MVC はそれでいっぱいです。また、ORM、DTO エンティティ ビュー モデル間のさまざまなマッピング、DI フレームワーク、JSON 解析など、さまざまなリフレクション ベースのプラクティスを使用および実装する方法がたくさんあります。
したがって、それらはすべてパフォーマンスに大きく影響するので、リフレクションの使用をできるだけ避け、足場などの別の解決策を見つけることを強くお勧めしますか? また、サーバーの負荷テストを実行するツールは何ですか?

4

2 に答える 2

6

リフレクションに問題はありません。賢明に使用してください。別名、結果をキャッシュして、これらの高価な呼び出しを何度も実行する必要がないようにします。リフレクションは、ASP.NET MVC で広く使用されています。たとえば、コントローラーとアクションの名前がルートから解析される場合、Reflection を使用して、呼び出す対応するメソッドを見つけます。見つかった場合を除いて、結果はキャッシュされるため、次に誰かが同じコントローラーとアクション名を要求したときに、呼び出されるメソッドがキャッシュからフェッチされます。

そのため、サードパーティのフレームワークを使用している場合は、ドキュメント/ソース コードでリフレクションを使用しているかどうか、およびそれらの呼び出しの結果をキャッシュしているかどうかを確認してください。

コードで使用する必要がある場合は、同じルールが適用されます => キャッシュします。

于 2012-12-01T09:00:32.197 に答える
2

ストレス テストについては、この SO 投稿でかなりの可能性が示されています: Stress Testing ASP.Net application


私はこの問題について自分で考え、次の結論に達しました。

  • ほとんどの人は、ページを何度も再送信することに 1 日を費やすことはありません。実際の Web サイトにアクセスする時間と照らし合わせると、最悪の場合でも Ajax 呼び出しがいくつか含まれるページを読んで消費するのにユーザーが費やす時間はごくわずかです。アプリケーションの同時ユーザーが 100 万人いる場合でも、通常、一度に 100 万のリクエストを処理する必要はありません。

  • Web は当然、文字列の比較に基づいています... HTTP 応答には型がありません。そのため、どの Web アプリケーションも、日常生活の事実として、この種のタスクを処理することを余儀なくされています。文字列比較と動的オブジェクトが少ないほど良いのですが、それらは本質的なものであり、避けられません。

  • 文字列比較によるマッピングや動的な型チェックなどは遅いですが、PHP のようなコンパイルされていない弱い型付けの言語で構築されたサイトには、これらのアクションがはるかに多く含まれます。C# コンソール アプリケーションと比較して MVC で可能なパフォーマンス ヒットの数にもかかわらず、MVC は Web ドメインの他の多くのソリューションよりも優れたソリューションです。

  • フレームワークを使用する、それに関連するパフォーマンス コストが発生します。.NET フレームワークを使用して C# で構築されたアプリケーションは、すべての意図と目的において、C++ で記述されたアプリケーションほどには機能しません。ただし、信頼性が向上し、コーディング時間が短縮され、テストが容易になるなどの利点があります。過去 10 年から 20 年でコンピューターの速度が爆発的に向上したことを考えると、これらのメリット (これは非常に大きなものです) と引き換えに、あちこちで数ミリ秒の追加を受け入れるようになりました。

これらの点を考慮すると、ASP.NET MVC アプリケーションを開発する際に、リフレクションなどをペストのように避けることはありません。なぜなら、リフレクションがアプリケーションの機能に非常に良い影響を与える可能性があることは明らかだからです。これらはツールであり、適切に使用すると多くのアプリケーションに大きなメリットをもたらします。

パフォーマンスに関しては、できる限り最善のソリューションを構築してから、それに戻ってストレス テストを実行するのが好きです。クラス X に実装したリフレクションは、結局のところパフォーマンスの問題ではないのでしょうか? 要するに、私の最初のタスクは優れたアーキテクチャを構築することであり、2 番目のタスクはそれを最適化してパフォーマンスを最後の一滴まで絞り出すことです。

于 2012-12-01T08:09:15.810 に答える