繁体   English   中英

在ASP.NET中“缓存”一个大表

[英]'Caching' a large table in ASP.NET

我了解每次刷新页面(尤其是在“ AjaxLand”中)都会导致从头开始调用我的后端/代码隐藏类……这是一个问题,因为我的类(它是System.Web.UI中的成员对象) .Page)包含从数据库中获取的大量数据。 因此,现在AjaxLand中的每个页面刷新都使我进行大型后端DB调用,而不仅仅是重用内存中的类对象。 有什么解决办法吗? 这是会话变量起作用的地方吗? 会话变量是我必须在链接到单用户和单会话实例的内存中保留对象的唯一选择吗?

您需要ASP.Net缓存

特别是数据缓存

如果您的数据是特定于用户的,那么使用Session就可以了。 如果您有网络农场或网络花园,请当心。 在这种情况下,您将需要会话服务器或数据库进行会话。

如果您的数据是应用程序级的,那么应用程序数据缓存可能是解决之道。 如果RAM有限且数据量巨大,请小心。 缓存可能会在不适当的时候清空自己。

无论哪种方式,您都需要测试您的应用程序如何执行更改。 您甚至可能会发现返回数据库是最糟糕的选择。

另外,您可以看看延迟加载一些数据,以减轻数据量。

看看这篇有关ASP.NET的各种缓存机制的MS 文章 您可能会感兴趣,有一个名为“在服务器内存中缓存任意对象”的部分。

既然您提到Ajax,我想您可能要考虑以下几点:

假设这个大数据集是静态的而不是暂时的,在第一次调用Ajax时,您的应用程序查询数据库,检索大量数据并返回到客户端(即,在浏览器上运行的浏览器/ JavaScript等),现在是客户端已经将所有这些存储在内存中。 随后,无需再返回服务器以获取客户端已在内存中存储的相同数据。 您需要做的是使用JavaScript重建DOM或其​​他任何内容。 从那时起,所有工作都可以在客户端上完成。

现在假设数据不是静态的而是瞬态的,那么通过将数据放置在服务器上来缓存会话绝对不是您想要的解决方案。 每次客户端向服务器发送请求时,服务器仅返回高速缓存(会话)中的内容,则数据已经过时,并且与客户端内存中的数据没有任何区别。

关键是,如果数据是静态的,则在内存中已有数据之后,将往返行程保存到服务器。 如果数据是瞬态的,恐怕除了以某种方式重新查询或重新检索数据并将所有内容发送回客户端之外,没有廉价的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM