Wicket AbstractAjaxTimerBehavior和性能

时间:2012-04-21 21:17:20

标签: ajax wicket

我在我的Wicket应用程序中使用了AbstractAjaxWicketBehavior,当出现更多AJAX调用时,它似乎随着时间的推移而下降。在没有AJAX的情况下刷新页面时,性能再次正常。我想知道这是正常的事情还是某种存在的内存泄漏?我不能简单地附加代码,因为它分布在更多的类上,需要花费太多精力才能理解,但简而言之,我想这样做:

  1. 创建并启动计时器
  2. 重复一些代码10x
  3. 停止计时器
  4. 将一些值设置为属性
  5. ajax refresh(导致显示/隐藏某些组件)
  6. 再次做同样的事(无限次地)。

    即使我使用100ms的恒定更新间隔,此流程的每次重复都会变慢。

    由于计时器是一种行为,不允许重新启动或重复使用,因此每次都会将其创建为新实例并附加到表单组件。

    计时器如下所示:

    static int count = 0
    new AbstractAjaxTimerBehavior(Duration.milliseconds(100)) {
     // do some code
     count++
     if(count == 10) {
      stop();
      // do some code
     } 
    }
    

    此行为附加到Panel内的Form上,单击AjaxLink后,Form将刷新(添加到AjaxRequestTarget)。每次我在添加新行为之前从Form组件中删除旧计时器。

    一切正常,但这个过程的每次重复运行都较慢(第一个是完美的,第二个也是100ms左右,但随后它变慢(重复10或15次后,刷新间隔约为1秒)并且应用程序中的所有其他AJAX调用也会明显变慢),所以我怀疑存在内存泄漏......任何明显的原因?或者任何方式如何使wicket计时器更好地为我的目的?任何建议表示赞赏感谢。

1 个答案:

答案 0 :(得分:2)

对于每个AJAX-Request,我们的wicket应用程序也会变慢。我不确定这是否是完全相同的问题,或者特别是它与AjaxTimerBehavior有关,但是:

我们发现其中一个原因是由于HTML替换而导致浏览器出现伪泄漏。显然,在重新加载页面之前,nrowser无法释放内存。

您可以使用任务管理器(或其他工具)监视浏览器内存,并观察每次AJAX请求的内存提升以及整页重新加载(F5)的情况。特别是在IE中。

我们用我们的AJAX请求替换了很多HTML。