3

我有一些在同一个会话中经常访问的大实体。例如,在我的应用程序中有一个由动态生成的图表图像组成的报告页面。对于此页面上的每个图表图像,客户端向相应的控制器发出请求,控制器使用一些实体生成图像。我可以使用 asp.net 的会话字典来“缓存”这些实体,或者依赖 nhibernate 的二级缓存支持,例如使用缓存查询。

你有什么意见?

顺便说一句,我将使用共享主机,nhibernate 的二级缓存主机友好吗?

谢谢。

4

2 回答 2

2

我认为你应该使用 NHibernate 的缓存。如果用户提出不同的请求来逐个获取每个实体,那么您可能应该使用不同的 NHibernate ISession 实现来获取它们(因为每个 Web 请求策略的会话)。

此外,当使用 Nhibernate 缓存时,您不会遇到并发问题 - 它会为您处理它们。

于 2010-04-19T09:14:48.013 回答
0

请注意在静态变量中缓存实体(从您加载它的会话),然后由另一个会话访问(例如,从您创建的缓存系统中提取)。

实体实例绑定到 Session 记住,因此您不应该跨 Session 边界混合和匹配实例。

我之前通过创建类的轻量级版本(不支持 NH 会话)并缓存该基本类来解决这个问题。

或者,使用没有这个问题的二级缓存。

于 2012-09-02T12:23:31.473 回答