2

aspx ページからデータを取得したい。ただし、充填する場合は静的フィールドでデータを待機します。

Jクエリ:

   $.ajax({
        url: "Services/JSON/GetMessage.aspx",
        type: "GET",
        dataType: "json",
        success: function (response) { alert(response.Text); },
        error: function (x, t, m) {
            if (t === "timeout") {
                alert("got timeout");
            } else {
                alert(t);
            }
        }
    })

サービス/JSON/GetMessage.aspx

<%@ Page Language="C#" %>
<% 
Response.Clear();
Response.ContentType = "text/json";
int tryCount = 0;
while (1 == 1)
{
    if (ClsStaticFields.Messages.Count > 0)
    {
        foreach(string message in ClsStaticFields.Messages) {
             Response.Write("{ Text:'" + message + "' }");
        }
    }
    tryCount ++;
    if (tryCount > 29) break; // 1 Minute wait and exit
    System.Threading.Thread.Sleep(2000); // 2 Second wait
}
Response.End();
%>

私は興味がありました:

  • この待機期間は他のユーザーに影響しますか?
  • これは IIS またはページのロックの原因ですか?
  • この使用法は CPU に悪影響を及ぼしていますか?
4

1 に答える 1

0

おそらくセッションに接続されているGetMessage.aspxページであるページを使用しているため、他のユーザーに影響を与えているようです。aspx

これが可能で、すべて問題がない場合は、そのページのセッションを無効にします。

<%@ Page Language="C#" EnableSessionState="false" %>

相対的:

同じセッションを共有している別の Web アプリの処理中に Web アプリがブロックされた
ASP.NET のボトルネックを特定するのに役立つ perfmon カウンター
ASP.Net のセッションを完全に置き換える

全体図

このクローズ ループ内でメッセージを待機する方法は良い考えではないと思います。2 つの代替案を提案します。

ブラウザで定期的な呼び出しを行いusing a javascript timerます。Ether way は 2 秒ごとにメッセージを受け取るので、数秒ごとにブラウザからそのメッセージを呼び出してみませんか?

または、comet メソッドを使用してサーバーを呼び出す方がよいでしょう。asp.net の彗星の例を次に示します: http://www.aaronlerch.com/blog/2007/07/08/creating-comet-applications-with-aspnet/

なぜ良くないのか、最初にasp.net iisに属するスレッドを使用し、ブラウザー呼び出しに接続します。つまり、開いた接続をそのままにして、開いている接続がすぐに使い果たされます。おそらくasp.netネットスレッドもそれに問題があります。

スレッド待機でループを閉じるのではなく、タイマーを使用して行う方が良いように定期的にチェックしてください。ここでは、ブラウザ自身が最適な場所です。

于 2012-07-04T08:02:55.417 に答える