【问题标题】:Wicket, page stack, and memory usageWicket、页面堆栈和内存使用情况
【发布时间】:2010-09-21 20:12:10
【问题描述】:

Wicket 应用程序序列化和缓存所有页面以支持有状态组件,以及支持后退按钮,以及其他可能的原因。我有一个应用程序,它使用 setResponsePage 从一个屏幕导航到另一个屏幕。在相当短的时间内会话变得相当大,因为所有先前的页面都存储在会话中。在大多数情况下,出于显而易见的原因,我只需要会话包含当前页面,也许还有最后 2 或 3 个页面,以便使用浏览器的后退按钮轻松导航。

在我离开页面并且我知道我不想使用返回按钮返回该页面版本后,我是否可以强制该页面过期?更一般地说,在 Wicket 中处理会话增长的推荐方法是什么?

【问题讨论】:

    标签: wicket


    【解决方案1】:

    http://apache-wicket.1842946.n4.nabble.com/Wicket-Session-grows-too-big-real-fast-td1875816.html

    如果您在页面上使用大量域对象,这些域对象最终会与其他域对象紧密耦合,请务必避免对这些对象进行序列化!

    看看 LoadableDetachableModel 用于包装域对象 DataView 和 IDataProvider 用于显示域对象列表

    您不应将域对象填充到组件的实例变量中。 为了在匿名子类中使用它们,您不应将域对象引用设为 final。 你不能将域对象的列表传递给 ListView。

    也许,在您的 Application 类中子类化 WbeRequestCycle 时,您可能会在页面映射中获得对页面生命周期的控制...虽然没有尝试过

    【讨论】:

      【解决方案2】:

      为了避免由于会话中的序列化和内存使用堆积而导致字节流连续堆叠而导致会话阻塞,您可以使用可分离模型通过使用钩子在每个请求开始时安排自己的存储和恢复cycle ,这样您就可以完全控制包含会话中不需要的页面字节流或可通过“返回”按钮导航的模型。

      【讨论】:

        猜你喜欢
        • 2012-01-26
        • 1970-01-01
        • 2012-07-15
        • 2014-05-23
        • 2012-03-14
        • 2011-11-30
        • 1970-01-01
        • 1970-01-01
        • 2011-10-21
        相关资源
        最近更新 更多