ASP.NET与后台缓存

ASP.NET与后台缓存,asp.net,vb.net,windows-services,backgroundworker,background-process,Asp.net,Vb.net,Windows Services,Backgroundworker,Background Process,我有一个非常大的数据库,我想从中打印数据,但是由于数据库非常大,通常需要10-20分钟来执行 我真的不希望web人员等待页面出现的时间太长,我想知道是否有一种方法可以每1小时对sql数据进行一次全局预缓存,让所有人都能看到 我试着在谷歌上搜索aspx和后台工作人员,我找到的大多数答案是,asp并不是为此而设计的,我需要使用Windows服务。。但据我所知,windows服务不支持Web浏览器访问? 或者有没有办法从Windows服务运行带有ASPX的Web服务器 我以前从未使用过aspx,也不知

我有一个非常大的数据库,我想从中打印数据,但是由于数据库非常大,通常需要10-20分钟来执行

我真的不希望web人员等待页面出现的时间太长,我想知道是否有一种方法可以每1小时对sql数据进行一次全局预缓存,让所有人都能看到

我试着在谷歌上搜索aspx和后台工作人员,我找到的大多数答案是,asp并不是为此而设计的,我需要使用Windows服务。。但据我所知,windows服务不支持Web浏览器访问? 或者有没有办法从Windows服务运行带有ASPX的Web服务器


我以前从未使用过aspx,也不知道我在做什么,但是我在vb.net中有大约2000个小时的时间查看这篇MSDN文章:

您可能希望将该数据添加到应用程序缓存中,滑动过期时间为1小时:

Cache.Insert("yourBigData", bigDataObject, _
    Nothing, System.Web.Caching.Cache.NoAbsoluteExpiration, _
    New TimeSpan(0, 60, 0))
然后,在您的代码中,每当您想要访问大数据时,请首先检查缓存:

If(Cache("yourBigData") IsNot Nothing) Then
    ' Get your data out of the cache, and use that
    Dim yourBigData As DataTable = CType(Cache("yourBigData"), DataTable)
Else
    ' retrieve the data and add it to the cache again
End If
有关更广泛的视角,请参见,尤其是:

ASP.NET有一个功能强大、易于使用的缓存机制,允许您 将需要大量服务器资源的对象存储在内存中 创造


这似乎正是您的情况。

如果VB.NET代码有语法错误,我深表歉意-我不再经常编写VB了。感谢您的解决方案,主要问题是,当需要更新缓存数据时,它可能仍然会使网站速度变慢,或者我遗漏了什么?您是对的,这只会导致慢度问题不那么频繁。亚里士多德用另一种方法(利用数据库使查询更便宜)对这个问题发表了很好的评论。@Droa我忘了在我最后的评论中ping你。见上文。@Droa我实际上根本没有使用过WCF服务,所以我不知道。您可以运行一个Windows服务,将累积的数据缓冲在一个“平面”表中(如Aristos所述),该表针对非常快速的选择进行了优化。而且,我想没有一个客户希望一次看到所有这20分钟的数据,对吗?也许你可以选择用户想要看到的窗口(比如在分页中)。如果你的查询需要20分钟才能执行,那么你需要解决这个问题。例如,创建第二个临时数据库,即将最终数据保存在平面表中,每6小时更新一次该平面数据,然后使用该平面表读取它们。