C# 是否可以使用外部进程(即不通过页面的代码隐藏)缓存对象?

C# 是否可以使用外部进程(即不通过页面的代码隐藏)缓存对象?,c#,asp.net,caching,web-applications,data-caching,C#,Asp.net,Caching,Web Applications,Data Caching,我得到了ASP.NET web应用程序所需的第一批海量数据。到目前为止(事实上已经两年了!)还没有出现任何成本如此高昂的问题,以至于我无法在页面上加载或将其存储在ViewState或Session中。但是现在,我需要一个保持相当静态(每天最多更新一次)的对象列表,其中包含大约5000个对象,并且每次在Page_Load上构建它都会导致加载时间受到明显影响 一些关于缓存的谷歌搜索显示了一些非常基本的例子,比如Cache[“myStuff”]=myObject这一切都很好。但我想知道是否有某种方法可

我得到了ASP.NET web应用程序所需的第一批海量数据。到目前为止(事实上已经两年了!)还没有出现任何成本如此高昂的问题,以至于我无法在页面上加载或将其存储在ViewState或Session中。但是现在,我需要一个保持相当静态(每天最多更新一次)的对象列表,其中包含大约5000个对象,并且每次在Page_Load上构建它都会导致加载时间受到明显影响

一些关于缓存的谷歌搜索显示了一些非常基本的例子,比如
Cache[“myStuff”]=myObject这一切都很好。但我想知道是否有某种方法可以将我的Web应用程序设置为在特定时间运行更新,而不管该应用程序是否正在被访问或正在使用

例如,我希望此过程更新列表,使其每天在凌晨4:00左右运行一次,此时没有人在使用任何东西。假设在下午的第1天,页面加载检查以获取缓存对象,但返回空值,因此在这种情况下,咬紧牙关,请求/构建第1天剩余时间的列表,将其存储在缓存中。在第1天剩下的时间里,没有人需要构建对象,因为它在缓存中并且仍然有效

第一天结束了,现在是第二天凌晨4点。没有人在使用任何页面。我希望从第1天起存储在缓存中的对象被删除并重新构建,这样当人们早上到达办公室时,第一个访问页面的人就不需要构建今天的列表,它已经完成了

我唯一的想法是研究如何创建一个在Windows计划任务或其他任务上运行的控制台应用程序。但即便如此,我也不确定如何从这样的外部应用程序与ASP.NET web应用程序交互


希望我说的有道理。我想实现的是可能的吗?

如果您使用像MemCached这样的分布式缓存,您可以创建一个Windows服务或控制台应用程序来填充缓存。由于两个应用程序(服务和web应用程序)将使用相同的缓存,因此它将解决您的问题

另一个解决方案是只为其创建一个页面(即/startcache.aspx),用于加载页面上的cachin。您可以将请求安排到该页面。您还可以使用某种防火墙将页面隐藏在web应用程序之外(因此没有人访问该页面!)。最后,此解决方案的优点在于可以重用当前代码,因为它将在同一项目中工作


希望有帮助。

如果您使用像MemCached这样的分布式缓存,您可以创建一个Windows服务或控制台应用程序来填充缓存。由于两个应用程序(服务和web应用程序)将使用相同的缓存,因此它将解决您的问题

另一个解决方案是只为其创建一个页面(即/startcache.aspx),用于加载页面上的cachin。您可以将请求安排到该页面。您还可以使用某种防火墙将页面隐藏在web应用程序之外(因此没有人访问该页面!)。最后,此解决方案的优点在于可以重用当前代码,因为它将在同一项目中工作


希望有帮助。

是进程外第三方缓存/键值存储的另一种选择。

是进程外第三方缓存/键值存储的另一种选择。

减少服务器和后端的负载,并提供所有日常数据(我从问题中了解到)

为什么不创建一个数据文件(CSV、XML、JSON)并将其作为数据点提供呢

从您的问题来看,客户端(应用程序)似乎能够对该数据集运行自己的查询


创建这样的文件可以在固定的时间集上完成,并保存一次。无需包括第三方解决方案(除了其令人尊敬的品质)

以减少服务器和后端的负载,并提供所有日常数据(我从问题中了解到)

为什么不创建一个数据文件(CSV、XML、JSON)并将其作为数据点提供呢

从您的问题来看,客户端(应用程序)似乎能够对该数据集运行自己的查询


创建这样的文件可以在固定的时间集上完成,并保存一次。不需要包括第三方解决方案(除了其令人尊敬的品质)

目的是什么?(试图了解其背后的原因)5000个对象太多了(!),我怀疑是否有用户能够掌握如此数量的信息。将这些信息转换为页面是一种选择吗?是的,这不是针对普通的日常用户,而是针对我们的内部网应用程序,各个团队使用该应用程序分析数据,因此他们非常习惯于大量数据。它们在大量数据之间来回移动,我刚想到使用缓存来减少冗余调用的数量。每个人都在一天中对数千条记录的多个数据源进行大量查询,当所有记录都是静态的(一次至少一天)时,只是为了澄清一下,用于intranet应用程序的这些数据都没有被修改。intranet应用程序仅用于查看数据。没有人通过intranet web应用程序进行任何类型的写入或更改。缓存是一种减少后端(数据库服务器)负载的方法。如果他们正在进行查询,为什么不公开一种方法,使这些查询能够“直接”对后端进行查询?你的解决方案似乎是下载所有需要的文件是的,在正常情况下,我同意。但我们处于一个非常奇怪/特定的网络环境中,数据分布在几个不同的服务器上,由于缺少Active Directory,我们无法访问一个服务器,然后从该服务器访问另一个服务器。在内部我们称之为“跳跃问题”,所以基本上我们需要做的是抓取d