【问题标题】:Storing large amounts of data in the Asp.net session在 Asp.net 会话中存储大量数据
【发布时间】:2013-03-05 13:25:20
【问题描述】:

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

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

【问题讨论】:

  • 每个用户的数据不同还是所有用户的数据相同(DateTime Int 对)?
  • 多个标签有什么关系?
  • 听起来像是.Cache 的工作,不是吗?

标签: c# asp.net session


【解决方案1】:

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

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

【讨论】:

  • Quickly 甚至没有开始描述服务器内存耗尽的速度。
  • 数据可能因用户类型而异,但我应该能够编写一些代码来有效地使用缓存。谢谢,
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 你对数据过多的解决办法是把它放在视图状态,然后上下推送给客户端?
    • true -- 也可以在master上放入Javascript,让客户端处理。我喜欢下面的解决方案,如果它对所有用户都相同,请缓存它
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      • 2011-05-28
      • 2011-12-31
      相关资源
      最近更新 更多