积极答复者
使用Cache.Insert时候遇到一个问题

问题
-
代码如下:
protected void Button1_Click(object sender, EventArgs e) { Cache.Insert("a", DateTime.Now.AddMilliseconds(10000) , null, DateTime.Now.AddMilliseconds(10000), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Default, new System.Web.Caching.CacheItemRemovedCallback(DeleteCallBack)); } private void DeleteCallBack(string key, object objvalue, System.Web.Caching.CacheItemRemovedReason reason) { string str1 = objvalue.ToString(); //2009/8/6 23:46:34 下午 string str2 = DateTime.Now.ToString(); //2009/8/6 23:46:47 下午 }
在下面这个回调函数中。我输出了插入时的时间:str1 。运行回调函数的时间:str2
我明明指定的是10秒后缓存过期。那么应该是10s后运行回调函数。应该是str1 = str2。但是实际情况却相差了13s。为什么?
郭鹏
答案
-
你好,
NoSlidingExpiration可以设置相对过期时间,如果缓存在NoSlidingExpiration设定的时间内没有被访问,缓存过期,如果在这段时间内有访问,则缓存过期时间将会重置为原始值,如NoSlidingExpiration=20
在20分钟内如果没有被访问,缓存过期,如果每次19分钟访问缓存,缓存将永远不会过期。
jon.valett@gmail.com- 已标记为答案 Hugo12345 2009年8月6日 17:24
- 取消答案标记 Hugo12345 2009年8月6日 17:24
- 已标记为答案 KeFang Chen 2009年8月10日 3:03
-
你好设置NoSlidingExpiration以禁用可调过期,即是说将插入缓存的方法的参数中的slidingExpiration 参数设置成 TimeSpan.Zero 字段
- 关于slidingExpiration:最后一次访问所插入对象时与该对象过期时之间的时间间隔。如果该值等效于 20 分钟,则对象在最后一次被访问 20 分钟之后将过期并被从缓存中移除
你这里的情况设置NoSlidingExpiration后,其实相当于10s后就过期无论客户端是否在这段时间内访问
但是实际上是13s这可能是由于一些计时器的误差导致的,因为Timer并不是那样精确的
Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond- 已标记为答案 KeFang Chen 2009年8月10日 3:03
- 关于slidingExpiration:最后一次访问所插入对象时与该对象过期时之间的时间间隔。如果该值等效于 20 分钟,则对象在最后一次被访问 20 分钟之后将过期并被从缓存中移除
-
您好,windows不是实时操作系统,每个线程的cpu时间是由windows来调度和分配的。
达不到精确的要求。- 已标记为答案 KeFang Chen 2009年8月10日 3:03
全部回复
-
你好,
NoSlidingExpiration可以设置相对过期时间,如果缓存在NoSlidingExpiration设定的时间内没有被访问,缓存过期,如果在这段时间内有访问,则缓存过期时间将会重置为原始值,如NoSlidingExpiration=20
在20分钟内如果没有被访问,缓存过期,如果每次19分钟访问缓存,缓存将永远不会过期。
jon.valett@gmail.com- 已标记为答案 Hugo12345 2009年8月6日 17:24
- 取消答案标记 Hugo12345 2009年8月6日 17:24
- 已标记为答案 KeFang Chen 2009年8月10日 3:03
-
你好设置NoSlidingExpiration以禁用可调过期,即是说将插入缓存的方法的参数中的slidingExpiration 参数设置成 TimeSpan.Zero 字段
- 关于slidingExpiration:最后一次访问所插入对象时与该对象过期时之间的时间间隔。如果该值等效于 20 分钟,则对象在最后一次被访问 20 分钟之后将过期并被从缓存中移除
你这里的情况设置NoSlidingExpiration后,其实相当于10s后就过期无论客户端是否在这段时间内访问
但是实际上是13s这可能是由于一些计时器的误差导致的,因为Timer并不是那样精确的
Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond- 已标记为答案 KeFang Chen 2009年8月10日 3:03
- 关于slidingExpiration:最后一次访问所插入对象时与该对象过期时之间的时间间隔。如果该值等效于 20 分钟,则对象在最后一次被访问 20 分钟之后将过期并被从缓存中移除
-
你好,理论上是这样的
Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond -
您好,windows不是实时操作系统,每个线程的cpu时间是由windows来调度和分配的。
达不到精确的要求。- 已标记为答案 KeFang Chen 2009年8月10日 3:03