11

メソッドがajax経由で呼び出されるasp.net MVC 4コントローラーがあります。

問題は、ajax リクエストがコントローラーによって順次処理されることです。ページをロードする時間はすべての ajax リクエストの合計であり、最長の ajax リクエストではないため、これによりパフォーマンスの問題が発生します。

これを実証するために、最初の ("ReadOverview8Week") メソッドにブレーク ポイントを配置しました。これらの方法はそれぞれ、個性を実行するのに約 600 ミリ秒かかります。

コントローラーが 3 つの要求すべてに並行して応答するようにするにはどうすればよいですか? 私はiis8を使用しています。

これは ajax リクエストです (kendo ui dataSource から)

.DataSource(dataSource => dataSource.Ajax()
   .Read(read => read.Action("ReadAllSitesOverview", "AbuseCase").Type(HttpVerbs.Get))

ありがとう。

4

1 に答える 1

19

あなたが直面している問題は、ASP.NET がセッションを管理する方法が原因です。ASP.NET セッション状態の概要(同時要求とセッション状態セクション)の最も重要な部分は次のとおりです。

ASP.NET セッション状態へのアクセスは、セッションごとに排他的です。つまり、2 人の異なるユーザーが同時に要求を行った場合、それぞれの個別のセッションへのアクセスが同時に許可されます。ただし、同じセッションに対して (同じ SessionID 値を使用して) 2 つの同時要求が行われた場合、最初の要求はセッション情報への排他的アクセスを取得します。2 番目の要求は、最初の要求が終了した後にのみ実行されます。

アクションがセッションへのアクセスを必要としない場合は、問題を解決できます。その場合は、コントローラーをSessionStateAttribute属性で装飾できます。

[SessionState(SessionStateBehavior.Disabled)]

このようにして、コントローラーはセッションを待つ必要がなくなります。

アクションがセッションへの読み取りアクセスのみを必要とする場合は、SessionStateBehavior.ReadOnly値を使用してみてください。これにより排他ロックが発生することはありませんが、要求は読み取り/書き込み要求によって設定されたロックを待機する必要があります。

于 2013-03-21T14:04:38.797 に答える