我正在使用DataTable
. Datatable 使用 IDataProvider 填充工具栏和单元格。
我试图弄清楚进行查询所花费的时间。一个典型的查询涉及调用
size(...)
iterator(...)
model(..)
什么是计算这些方法花费的时间的好方法?我可以System.currentTimeMillis()
在每个调用中实现类似的东西,但是这样做的“适当”位置是什么?
而且,我想在工具栏中显示这个时间,所以我应该确保“数据加载”部分何时完成。有什么提示吗?
由于您实际上不是在测量 DataProvider,而是在 Lucene 方法返回结果,所以我宁愿在 dataprovider 调用的方法中记录时间(假设有类似搜索服务类的东西)。
作为一个优势,其他DataProviders
调用相同方法的人也将被测量,而无需接触它们。也许有一个更中心的地方可以放置它?每个搜索请求都必须通过的单一方法?
就个人而言,我喜欢StopWatch
来自Apache Commons Lang库,它使用起来非常不言自明。但是,如果您还不需要该库,那么仅将其添加用于时间测量可能会有点过大。currentTimeMillies
工作正常。
如果有的话我会测量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
方法。也许这会有所帮助。