Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为所有用户缓存一次对象,每30分钟刷新一次_C#_Web Services_Caching_Web_Intranet - Fatal编程技术网

C# 为所有用户缓存一次对象,每30分钟刷新一次

C# 为所有用户缓存一次对象,每30分钟刷新一次,c#,web-services,caching,web,intranet,C#,Web Services,Caching,Web,Intranet,我在一个intranet上工作,我想在服务器上缓存一个对象,并在用户请求时提供给用户,而不是让每个用户生成自己的对象副本。我还想每30分钟刷新一次对象 我当前正在使用HttpContext.Current.Cache,但我不确定是否: 1.这就是我要找的 2.有没有更好的方法来实现这一点(我想是web服务) 谢谢。使用HttpRuntime.Cache(与HttpContext.Cache相同)有一个陷阱,它与AppDomain绑定。当它循环使用时,缓存也会循环使用 相反,安装类似于Membas

我在一个intranet上工作,我想在服务器上缓存一个对象,并在用户请求时提供给用户,而不是让每个用户生成自己的对象副本。我还想每30分钟刷新一次对象

我当前正在使用HttpContext.Current.Cache,但我不确定是否: 1.这就是我要找的 2.有没有更好的方法来实现这一点(我想是web服务)


谢谢。

使用
HttpRuntime.Cache
(与
HttpContext.Cache
相同)有一个陷阱,它与
AppDomain
绑定。当它循环使用时,缓存也会循环使用

相反,安装类似于Membase(Memcache)的东西,它充当外部缓存提供程序,在应用程序回收之间保持持久性

至于刷新,我个人会将该项目缓存30分钟,但允许其过期。仅当请求传入且项目不再在缓存中时才刷新它。这使缓存保持高效,因为只有请求的对象保留在缓存中


作为一个无耻的插件,我不久前编写了一个支持Memcache的缓存库,您可以使用它,请参见这里-

HttpContext.Current.cache是所有用户共享的appDomain范围的缓存。对于您的案例来说,它是存储您需要在所有用户之间共享的任何对象的合适位置。它还支持过期。

这意味着当第一个用户浏览到该页面时,将创建缓存,随后的用户将从缓存中检索对象?如果两个用户在完全相同的情况下这样做,会发生什么?或多或少。这取决于您的代码(有关详细信息,请参阅)。如果缓存的对象不是不可变的,则需要添加自己的锁定,以防止多个请求同时修改对象。该列表可能包含数百个用户对象。