我正在使用DataTable
在Wicket中显示(Lucene)搜索结果。 Datatable使用IDataProvider填充工具栏和单元格。
我试着弄清楚进行查询所花费的时间。典型的查询涉及对
的调用size(...)
iterator(...)
model(..)
计算这些方法的时间花费的好方法是什么?我可以在每个调用中实现System.currentTimeMillis()
之类的内容,但是这样做的“适当”位置是什么?
而且,我想在工具栏中显示这个时间,所以我应该确定'dataloading'部分何时完成。任何提示?
答案 0 :(得分:1)
如果可以,我会用iterator()
方法测量时间。除非你真的有一个大的列表和size()
显着的时间我会说这已经足够了。我没有看到一种方法来给你在iterator()
方法中测量的执行时间。
我知道有类似的东西:http://ci.apache.org/projects/wicket/apidocs/6.0.x/org/apache/wicket/devutils/inspector/RenderPerformanceListener.html但我从未使用它。
您也可以尝试挂钩RequestCycle
。有一种方法getStartTime()
http://ci.apache.org/projects/wicket/apidocs/6.0.x/org/apache/wicket/request/cycle/RequestCycle.html#getStartTime()。您可以在onEndRequest()
中结束测量。
还有RequestCycle的监听器。 http://ci.apache.org/projects/wicket/apidocs/6.0.x/org/apache/wicket/request/cycle/IRequestCycleListener.html
有onBeginRequest
和onEndRequest
方法。也许这可能有所帮助。
答案 1 :(得分:1)
由于您实际上没有测量DataProvider,但Lucene方法返回结果,我宁愿记录dataprovider调用的方法中的时间(假设有类似搜索服务类的东西)。
作为一个优势,调用相同方法的其他DataProviders
也将被测量,而不会触及它们。也许还有更重要的地方可以提出来吗?每个搜索请求都必须通过哪种方法?
就我个人而言,我喜欢Apache Commons Lang库中的StopWatch
,这是非常自我解释的。但是,如果您还不需要该库,那么添加它只是为了进行时间测量可能会有点过大。 currentTimeMillies
也可以。