1

を使用して (Lucene) 検索結果を Wicket に表示していDataTableます。Datatable は IDataProvider を使用して、ツールバーとセルを設定します。

クエリを実行するのにかかった時間を把握しようとします。典型的なクエリには、への呼び出しが含まれます。

  • size(...)
  • iterator(...)
  • model(..)

これらの方法で費やされた時間をカウントするための良いアプローチは何でしょうか? これらの各呼び出しのようなものを実装できますSystem.currentTimeMillis()が、これを行う「適切な」場所はどこでしょうか?

また、今回はツールバーに表示したいので、「データの読み込み」の部分がいつ終わるかをどうにかして確認する必要があります。ヒントはありますか?

4

2 に答える 2

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ます。多分これは役立つかもしれません。

于 2013-02-04T18:21:19.520 に答える
1

実際に DataProvider を測定するのではなく、結果を返す Lucene メソッドを測定しているので、dataprovider によって呼び出されたメソッドに時間を記録したいと思います (検索サービス クラスのようなものがあると仮定します)。

利点として、DataProviders同じメソッドを呼び出す他のものも、それらに触れることなく測定されます。たぶん、それを置くためのさらに中心的な場所がありますか?すべての検索リクエストが通過しなければならない単一の方法は?

個人的にはStopWatchApache Commons Langライブラリが好きです。使用するのは非常に自明です。ただし、別の方法でライブラリをまだ必要としていない場合は、時間測定のためだけにライブラリを追加するには、おそらく少し大きすぎるでしょう。currentTimeMillies同様に正常に動作します。

于 2013-02-08T16:11:06.253 に答える