我可以使用什么会话或缓存

问题描述:

我正在使用母版页,其中菜单根据代码中的用户角色动态生成。所有应用程序都使用相同的菜单注销特定用户。因此,不需要重新创建它,我需要为所有应用程序提供相同的菜单。菜单在StringBuilder中,它的大小非常大。为什么会话或数据缓存更好,内存消耗更少?请建议?我可以使用什么会话或缓存

我想提高母版页的性能。

感谢

我想缓存会更好,因为你将有一个角色只有一个实例创建,但会议将使它创建多个实例多达用户访问,你将不得不等待会话超时有时以释放内存

+0

supose我有4个角色。这意味着只有4菜单被缓存在内存中,并根据用户角色用户使用这些菜单我对不对? – Areeb 2012-03-01 13:32:40

+0

是的,或者你可以把它放到应用程序状态中,因为你不需要刷新它们,所以缓存是假设存储需要刷新的数据,你的web服务器可能会在高负载下丢弃缓存对象,但是应用程序状态可以永久保存,请查看:http://msdn.microsoft.com/en-us/library/94xkskdf。ASPX – 2012-03-01 13:47:03

如果每个用户都将获得相同的菜单:

你应该考虑把它在应用程序“高速缓存” - 应用[“的MyMenu”]或在一个静态字段的对象。

这个的主要原因是终身。如果将它放在应用程序级别的对象中,则它将持续应用程序的生命周期。把它放在会话级别的对象中会导致它在会话结束时丢失 - 因为会话是按用户启动的,那么你很快就会发现自己正在回忆数据。

在另一方面......如果它的每个用户的独特之处:

会议提供了一个方便的地方来存放这些数据,因为它是唯一的用户,并且将活不长了以后该用户离开该网站。

想想也是:

如果你真的觉得记忆将是一个问题,或者你想定义你究竟有多长保持为

把它放在高速缓存。您可以确定其在缓存中的时间量,此外,缓存将在内存不足时开始转储对象 - 因此它比其他选项更加敏感。

还有就是Session vs Cache on SO already

此外

商量好了你确定你的菜单是大吗?如果是这样,你可能需要考虑其他选择 - 你说话有多大?

+0

是内存的问题,字符串是围绕113线和每一位用户菜单不同 – Areeb 2012-03-01 13:30:39

+0

那么它属于在缓存中,并且您的代码将1)建立菜单,2)用钥匙把它放在缓存中为该用户和3)返回菜单。检索代码将1)检查菜单是否在缓存中2)如果是,返回它或3)生成菜单并将其放回缓存中,然后返回。您需要将检索成本与用于缓存的内存进行平衡。 – dash 2012-03-01 13:57:05

+0

感谢您的帮助。 – Areeb 2012-03-02 10:17:06