【问题标题】:ASP.NET session management for huge object instance大型对象实例的 ASP.NET 会话管理
【发布时间】:2015-08-27 08:10:19
【问题描述】:

实现 ASP.NET 会话管理的最佳方法是什么,当我记住我有一个巨大的对象实例要保持在会话中时,这也应该是数据库管理的,即会话 ID 保存在数据库中。

我在会话中保留的对象实例也有数据表实例。

提前感谢您的任何建议/cmets。

【问题讨论】:

    标签: c# asp.net session


    【解决方案1】:

    ASP.NET 的会话状态提供者很少,一个是SqlSessionStateStore,它将会话状态存储在 SQL 服务器中。

    您可以在MSDN 上阅读更多内容。

    另一件事是在会话中存储大对象(尤其是 DataTables)似乎是个坏主意。一件事是您可能会遇到日期、锁和数据不同步的内存问题,另一件事是检索、序列化和反序列化它可能会耗费时间和资源。

    【讨论】:

    • 为您的答案加 1。虽然我会继续讨论以邀请更多的 cmets。
    • 我已经提到过这种方法——它需要序列化对象,存储在会话中。而且你可以通过简单地尝试为你的“巨大对象”添加/修复序列化来完成更多的重构,而不是简单地重写它;)
    • @justmara 我相信我们同时添加了帖子;)
    【解决方案2】:

    “最佳方式”是从会话存储中删除大对象。会话存储中的数据表实例是一个完全“永远不要像这样使用会话”的示例。

    ASP.NET 会话是一个 InProc 集合(默认情况下)。它将您放置到“会话”集合的所有数据保存在当前进程内存中。因此,如果 apppool 刷新 - 你会丢失会话。

    您可以尝试使用的每种类型的“会话提供程序”都需要序列化放置在会话中的数据。这对您的数据表意味着巨大的问题。

    【讨论】:

    • 我知道我们不应该保留数据表,这是非托管内存,但这是遗留代码,转换非常耗时。目前,我们会认为它的优点是什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多