0

可能重复:
内存中收集的 Linq 性能

我有一个拥有大约 100 万用户的 Web 应用程序。该应用程序中的几乎每个网页都调用 GetUser() 方法(以加载活动流中的名字和其他用户详细信息)。现在我正在为每次调用访问数据库,我正在考虑将所有用户缓存在内存中并使用 Linq 从那里获取搜索结果或 GetUser()。

我唯一的问题是缓存所有用户(在内存中)是否是一个好主意。我会浪费我的内存吗?我个人认为从 RAM 中获取比从 DB 中获取要快得多(即使 DB 已经过优化和索引)。

请注意,我已经处理了缓存验证/更新/等。

stackoverflow 是否缓存所有用户?

4

2 回答 2

1

我们做了类似的事情,但没有转向 Linq,我们只是在每个 Web 服务器上安装了 SQL Server Express 的副本。我们会将用户数据更改推送到每个 Web 服务器,并且本地应用程序使用中间层,并且只定期从本地数据库中提取数据(但至少这是本地的,而不是每个人都访问数据库)。

您使用什么技术进行缓存,以及应用程序(或 Linq)如何知道何时刷新其本地副本,取决于允许缓存数据的陈旧程度。

于 2012-06-20T18:02:10.980 回答
1

如果 GetUser 将在大多数时间返回同一组用户,并且如果大多数用户很少被检索到,您可以尝试一种混合方法,您可以设置一个字典(或其他一些集合)并首先检查该集合并且它确实不存在然后从数据库中获取它并将其存储到集合中。

使用这种方法,您还可以使用缓存,因为它已经具有内置机制来过时并自行清理。

话虽如此,我过去从事过一个项目,我们为用户做了同样的事情(尽管我们只有大约 100 个用户),我们所有的研究和测试发现每次访问数据库都更快。

于 2012-06-20T18:09:02.143 回答