我使用DataTable
在Wicket中显示(Lucene)搜索结果。Datatable使用IDataProvider填充工具栏和单元格。
我试图找出执行查询所需的时间。一个典型的查询需要调用
size(...)
iterator(...)
model(..)
计算这些方法花费的时间的好方法是什么?我可以在每个调用中实现像System.currentTimeMillis()
这样的东西,但是在什么地方可以这样做呢?
而且,我想在工具栏中显示这一次,所以我应该确保“数据处理”部分何时完成。有什么暗示吗?
发布于 2013-02-04 18:21:19
如果有的话,我将测量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
方法。也许这个能帮上忙。
发布于 2013-02-08 16:11:06
由于您实际上并不测量DataProvider,而是返回结果的Lucene方法,所以我宁愿在数据提供者调用的方法中记录时间(假设有类似于搜索服务类的东西)。
作为一个优势,其他DataProviders
调用相同的方法也将被测量,而不触及它们。也许还有一个更中央的地方可以放它?每一个搜索请求都必须经过的单一方法?
就我个人而言,我喜欢StopWatch
从阿帕奇公域朗库,它是相当自我解释使用。然而,如果您已经不需要库,否则,它可能会有点过大,添加它只是为了时间测量。currentTimeMillies
的工作也很好。
https://stackoverflow.com/questions/14686739
复制相似问题