4

document.ready で .NET ページ メソッドへの 6 つの非同期 jQuery ajax 呼び出しを一度に実行して、データベースからさまざまなデータ セットを要求し、その代わりにグラフとしてユーザーにレンダリングしようとしています。

問題は、1 つのグラフの生成に時間がかかると、次の 5 つのグラフの生成がロックされることです。非同期の ajax 呼び出しを使用し、ページ メソッドが並行して処理される場合にかかると思われる分。

このフォーラムで多くの有用な投稿を読んだ後、これは、ページ メソッド内でセッション オブジェクトを読み書きする必要があり、asp.net が要求全体をロックし、その結果、それらが順次実行されるためであることがわかりました。

@Page タグでセッション状態を読み取り専用に設定することを提案している人を見てきましたが、セッションへの書き込みも必要であるため、私の問題には対処できません。inProc セッションから sql データベース セッションへの移行を検討しましたが、セッション オブジェクトはシリアル化できず、プロジェクト全体で使用されています。セッションにはユーザー固有の詳細が含まれているため、代わりにキャッシュを使用するように変更することもできません。

誰でも助けて、正しい方向に向けてもらえますか? 私はこのページの非効率性を調査するために何日も費やしてきましたが、まだ良い方法をまだ見つけていません.

前もって感謝します

4

2 に答える 2

2

私の個人的な経験から、SQL セッションに切り替えてもこの問題は解決しません。最初のスレッドがデータベース内の 1 つ以上の行に排他ロックを保持するため、すべての同時スレッドが SQL でブロックされるためです。

あなたのセッション オブジェクトがシリアル化できない理由が知りたいです。私が考えることができる唯一の解決策は、データベーステーブルを使用して、セッションで保持しているユーザー固有のデータを保存し、ユーザーデータの更新にかかる間だけデータベースロックを保持することです.

ASP.NET セッション ID またはその他の一意の Cookie 値をデータベース キーとして使用できます。

于 2012-06-28T01:21:08.803 に答える
1

問題はサーバー側ではない可能性があります。

ブラウザーには、作成する同時 HTTP 要求の数に制限が組み込まれています。これは、2 の制限を提案する HTTP/1.1 仕様の一部です。

IE7 では制限は 2 です。IE8 では 6 です。しかし、ページが読み込まれると、CSS、JS、画像などの同時リクエストにより、簡単に 6 に達する可能性があります。

これらの制限に関する適切な情報源は、BrowserScope です(「ホスト名ごとの接続数」列を参照)。

これら 6 つのリクエストを 1 つのリクエストにまとめるとどうなりますか? これにより、ロードも少し速くなります。

于 2012-06-28T01:59:07.457 に答える