许多客户端生成缓存时出现奇怪的行为

时间:2013-08-31 14:19:49

标签: asp.net caching optimization

我通过简单的代码段向您展示我的问题。

这是一种流行的场景。用户在没有缓存时加载我们的页面,所以我们生成一个。在我的代码示例中,这需要120秒来保存缓存,并在此之前使用静态变量。

我的qustion是为什么当我在同一时刻多次打开此页面并且缓存为空时,静态变量“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;
    }
}

1 个答案:

答案 0 :(得分:0)

因为您在PageLoad

上再次声明i时有错误
  protected void Page_Load(object sender, EventArgs e)
    {
        int i; // <----- here, this is probably bug and you must remove this line

你也需要某种锁定来避免在同一时刻进行多次通话,即使你当前锁定页面会话也是如此。