2

我正在编写一个 C#/asp.net 页面,目前我在页面加载时从数据库中提取了大量数据(比如 100 000 个 Datetime int 对),但是每次加载页面加载相同的数据似乎有点愚蠢。我考虑过将此值存储在会话中,但多个浏览器选项卡似乎会导致问题。

有没有更好的方法来存储这些值,如果我需要支持多个浏览器选项卡,是否使用合适的会话?

4

4 回答 4

9

您的会话会占用大量服务器内存。您可以将会话存储在数据库中(这违背了目的,因为这就是您首先要将它们存储在会话中的原因),但是在行之间读取(为什么每个访问者需要 100,000 个唯一的日期时间对?)我认为您应该真正考虑将这些值存储在缓存中(如果它们对所有用户都相同)。

在会话中存储 100k 个 int 对的问题在于它可能适用于 1 或 2 个,甚至可能是十几个用户。但是当您的网站变得流行时,它根本无法扩展。您的服务器将无法存储 500,000 个 100,000 个 int 对的用户会话。你很快就会耗尽内存

于 2013-03-05T13:29:58.227 回答
2

如果此数据对于每个用户都是唯一的,则会话可能是缓存数据的有效位置。虽然,如果你这样做,那么你应该知道你添加到会话中的东西会保留在那里并且需要删除。此外,由于您为每个用户会话存储大量数据,因此您消耗大量服务器内存。这就是史蒂夫的回答 - 你很容易发现自己的空间不足,多个用户拥有大量会话数据

如果每个用户的数据没有变化,那么缓存就是答案!

于 2013-03-05T13:32:51.250 回答
0

会话可能会变得笨拙。您可能需要考虑一个母版页来包装您的页面。然后您可以在母版中加载一次数据,并使其在页面之间保持可用,或者放入页面上的隐藏对象(例如文字)中能够访问。

为什么需要页面之间的所有对?

于 2013-03-05T13:31:17.787 回答
0

使用缓存而不是会话变量怎么样:http: //msdn.microsoft.com/en-us/library/aa478965.aspx

于 2013-03-05T13:36:19.597 回答