0

簡単なコードスニペットで私の問題を示します。

これは人気のあるシナリオです。ユーザーはキャッシュがないときにページをロードするため、キャッシュを生成します。私のコード例では、キャッシュを保存するのに 120 秒かかり、この前に静的変数をインクリメントします。

私の質問は、同じ瞬間にこのページを何度も開いてキャッシュがnullの場合、静的変数「i」が増加しない理由です。

public partial class _Default : Page
{
    static int i = 0;

    protected void Page_Load(object sender, EventArgs e)
    {
        int i;

        var cache = Cache.Get("cache") as string;
        if (string.IsNullOrEmpty(cache))
        {
            i = GenerateCache();
        }
        else
        {
            i = Convert.ToInt32(cache);
        }

        Response.Write(i.ToString());
    }

    public int GenerateCache()
    {
        var sw = new Stopwatch();
        sw.Start();

        ++i;

        Response.Write(i+"<br>");

        while (sw.ElapsedMilliseconds < 1000 * 120) { }

        Cache.Insert("cache", i.ToString());

        return i;
    }
}
4

1 に答える 1

0

iPageLoad でを再度宣言してバグがあるため

  protected void Page_Load(object sender, EventArgs e)
    {
        int i; // <----- here, this is probably bug and you must remove this line

また、ページセッションのロックによって一時的に保存したとしても、同時に複数の呼び出しを回避するために何らかのロックが必要です。

于 2013-08-31T16:32:08.343 に答える