2012-04-21 56 views
0

我在我的Wicket应用程序中使用AbstractAjaxWicketBehavior,并且当出现更多的AJAX调用时,它似乎随着时间的推移而下降。当页面刷新没有AJAX时,性能再次变好。我想知道这是正常的事情还是可能是某种类型的内存泄漏?我不能简单地连接代码,因为它是分布在更多的类,它需要太多的精力去了解,但总之我想这样做:Wicket AbstractAjaxTimerBehavior和性能

  1. 创建并启动定时器
  2. 重复一些代码10X
  3. 停止定时器
  4. 设置一些值属性到
  5. AJAX刷新(原因显示出一些部件的/隐藏)

和在S再次(意味着无限次)。

即使我使用100ms的持续更新间隔,此流程的每一次重复都较慢。

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

计时器看起来是这样的:

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

这种行为被连接到形成面板内,在一个点击的AjaxLink形式刷新(加入AjaxRequestTarget)。每次在添加新行为之前从Form组件中删除旧的计时器。

一切工作正常,但这个过程的每一个重复运行较慢(第一个是完美的,第二个也是100ms左右,但后来变得更慢(经过10或15次重复,刷新间隔大约1秒)和应用程序中的所有其他AJAX调用也会明显变慢),所以我怀疑存在内存泄漏......任何明显的原因?或者有什么方法可以让我的目的更好地实现小门计时器?任何意见赞赏。谢谢。

回答

2

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

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

您可以使用任务管理器(或另一个工具)监视浏览器内存,并观察每个AJAX请求的内存增加以及它如何减轻整页重新加载(F5)。特别是在IE中。

尽管我们用我们的AJAX请求代替了大量的HTML。