2

私はめったに起こらない問題を抱えていますが、とにかく捕まる可能性があります。問題は、コントローラーのアクションを呼び出すときに、大幅な時間遅延が発生する場合があることです。私は時間を記録しました、そして結果は非常に奇妙に見えます:

> -->BeginRequest: /Data/MyController Now: 17:47:37:248 Thread id = 22
> ---->Prerequest: /Data/MyController Now: 17:47:37:249 Thread id = 22
> ------>Init DataController: /Data/MyController Now: 17:47:37:250 Thread id = 22
> ------>/Data/MyController executing:  Now: 17:47:46:302 Thread id = 22
> == /Data/MyController inside: now is 17:47:46:304

BeginRequestとPrerequestは、Global.asaxにログインしたイベントであり、Initはコントローラーからのものです。オーバーライドメソッドを初期化し、コントローラーでOnActionExecutingから-を実行します。

ご覧のとおり、コントローラーの初期化から実行までに約10秒かかります。この時期に何が起こっているのかわかりません。どのイベントを確認する必要がありますか?

4

1 に答える 1

3

Initializeメソッドとコントローラーアクションの入力の間に発生する可能性のあることはたくさんあります。詳細な概要を提供する次の記事をご覧ください。そして、ここからポスターをダウンロードできます。

基本的に、コントローラーを初期化した後、実行される手順は次のとおりです。

  1. 承認フィルターOnAuthorizationメソッドが呼び出されます
  2. モデルバインダーはパラメーターを逆シリアル化します
  3. アクションフィルターOnActionExecutingメソッドが呼び出されます

手順1と2が逆になっている記事に示されている図にわずかなエラーがあります。実際、承認フィルターはモデルバインダーの前に実行されます。

したがって、コードで探す必要があるのは、カスタム承認フィルター、カスタムモデルバインダー、およびカスタムアクションフィルターです。これらはすべて、コントローラーの初期化ロジックとコントローラーアクションの開始の間に観察されている速度低下の原因である可能性があります。

于 2012-04-18T06:19:54.490 に答える