18

ASP.NET Webサイトでメソッドを実行する最速の方法は何ですか?

シナリオは非常に単純です。Webページがヒットしたときに実行する必要があるメソッドがあります。ページ上で他に何も起こっていません。レンダリングされた出力は「完了」メッセージのみです。処理をできるだけ速くしたい。

すべてのヒットは一意であるため、キャッシュはオプションではありません。

私の計画は、HttpHandlerを使用して、通常の.aspxページではなくweb.config(mypage.ashx)で構成することです。これにより、オーバーヘッドが大幅に削減されます。

だから私の質問は本当にです:HttpHandlersを使用するよりもこれを達成するためのより速い方法はありますか?

4

3 に答える 3

27

あなたが何をしているかにもよりますが、HttpHandler を使用するだけで多くの改善が見られるとは思えません。HttpHandler を記述して、そのパフォーマンスを確認することから始めます。より高速にする必要がある場合は、リクエストの処理中に実際に行っていることを詳しく調べて、最適化できることを確認してください。たとえば、データベースへのログ記録を行っている場合は、ネットワーク経由ではなく、ローカル データベースへの書き込みを試みます。それでも十分に速くない場合は、より低いレベルのものを書くことを検討してください。ただし、その時点までは、あなたにとって最も書きやすいものに固執します。

参考までに、負荷がかかった状態で 0 ~ 15 ミリ秒で広告を配信できる (ターゲティングとインプレッションのローカル データベースへのログ記録を含む) ASP.NET (HttpHandlers を使用) で広告サーバーを作成しました。私はかなりの処理を行っていると思っていましたが、それはかなり良い応答時間です。


数か月後の更新:

デフォルトで含まれているすべての HttpModules をクリアすると、かなりの量のオーバーヘッドが削除されます。既定では、次の HttpModules は、コンピューター レベルの web.config ファイルを介してすべてのサイトに含まれています。

  • 出力キャッシュ
  • セッション (セッション状態用)
  • Windows認証
  • フォーム認証
  • パスポート認証
  • RoleManager
  • URL認可
  • ファイル認証
  • 匿名識別
  • プロフィール
  • エラーハンドラ
  • サービスモデル

上で述べたように、私の広告サーバーはこれらのいずれも使用しないため、そのアプリの web.config でこれを行っただけです。

<httpModules>
   <clear />
</httpModules>

それらのすべてではなく一部が必要な場合は、不要なものを削除できます。

<httpModules>
   <remove name="PassportAuthentication" />
   <remove name="Session" />
</httpModules>

ASP.NET MVC 注: ASP.NET MVC には、回避策として特別な措置を講じない限り、セッション状態モジュールが必要です。詳細については、次の質問を参照してください: ASP.NET MVC でセッション状態を無効にするにはどうすればよいですか?

IIS7 の更新:残念ながら、IIS7 では物事はそれほど単純ではありません。IIS7でHTTPモジュールをクリアする方法は次のとおりです

于 2009-02-04T03:53:47.470 に答える
1

正確なシナリオはわかりませんが、ページがデータを処理しているだけの場合は、aspxページやhttpハンドラーはまったく必要ありません。ASMX WebサービスまたはWCFサービスを作成して、必要な処理を実行できます。これにより、オーバーヘッドが少なくなる可能性があります。WCFサービスは、ASP.NETでホストする必要はありません。Windowsサービスまたはコンソールアプリからホストし、名前付きパイプを使用してインプロセスで呼び出すことができます。これにより、データ処理コードを呼び出すためのオーバーヘッドが大幅に削減される可能性があります。

于 2009-02-04T04:06:13.967 に答える
0

本当にasp.netを使用する必要がある場合は、AuthorizeRequestステップにフックしてそこからリクエストをインターセプトし、処理を行ってDoneレスポンスを直接書き込むこともできます.

于 2009-07-08T14:18:11.063 に答える