ASP.Net缓存在IIS 6.0下不起作用

时间:2010-10-15 14:03:30

标签: c# asp.net iis-6

我有一个带有简单缓存帮助器的ASP.Net应用程序。 在VS Web服务器下,它工作正常。 在IIS 6.0下缓存不起作用 - 对象,保存了previos,一分钟后没有返回(没有例外)。 可能有什么不对?

public static class CacheHelper
    {
        public static string Share<T>(T @object, TimeSpan period)
        {
            var uniqueKey = Guid.NewGuid().ToString();
            HttpContext.Current.Cache.Add(uniqueKey, @object, null, Cache.NoAbsoluteExpiration,
                period, CacheItemPriority.BelowNormal, null);
            return uniqueKey;
        }
        public static void ShareViaCookie<T>(string key, T @object, TimeSpan period)
        {
            var cachedObject = GetFromCookie<T>(key);
            if (ReferenceEquals(cachedObject, null))
            {
                var uniqueKey = Share(@object, period);
                HttpContext.Current.Response.Cookies.Set(new HttpCookie(key, uniqueKey)
                {
                    Expires = DateTime.Now.AddYears(1)
                });
            }
            else
            {
                HttpContext.Current.Cache[GetKeyFromCookie(key)] = @object;
            }
        }

        public static T GetShared<T>(string key)
        {
            string uniqueKey = HttpContext.Current.Request.QueryString[key];

            return !string.IsNullOrEmpty(uniqueKey) ? (T)HttpContext.Current.Cache.Get(uniqueKey) : GetFromCookie<T>(key);
        }

        private static T GetFromCookie<T>(string key)
        {
            string uniqueKey = GetKeyFromCookie(key);

            return !string.IsNullOrEmpty(uniqueKey) ? (T)HttpContext.Current.Cache.Get(uniqueKey) : default(T);
        }

        private static string GetKeyFromCookie(string key)
        {
            return HttpContext.Current.Request.Cookies[key]
                .IIf(it => it != null, it => it.Value, it => null);
        }
    }

1 个答案:

答案 0 :(得分:2)

也许没有任何技术上的错误。缓存并不意味着在持久化后的任何对象都将被返回。

如果您的网站缓存了大量项目且缓存不够大,则可能会不断寻找要从缓存中删除的对象。在这种情况下,有时刚刚缓存的对象可能是一个很好的删除对象。如果你有100个对象的空间,并且缓存已经满了至少访问过一次的项目,那么它可能永远不会缓存“从未被访问过”的新对象。这确实发生在奇怪的场合。