fc2ブログ

なぜGetNextdocumentなのか?

 そういえば、なぜLotusScriptでビューをループするときはWhile ループ+GetNextDocumentで書くのでしょう。
別にGetNthDocument メソッドを使ってFor ループで書いてもいいじゃないか、て僕はよく思っていました。

これをしないのはForループととWhileループの違いではなくて、単純にGetNthDocumentよりGetNextDocumentの方がパフォーマンスがよいからです。とはいえこのことを検証したことは無かったので、エージェントプロファイリングを使って分析して見てみましょう。該当メソッドだけを抜粋しているので完全な形式で無い点はご容赦下さい
 データベースやサンプルコードはは昨日使用したものと同じです。GetNextDocumentのWhileループをview.count を使ってForループに変えるのは自明な変更なので省略させてください。
同じデータベースに対して、ループでアクセスしてメソッドの所要時間を比較してみましょう。

 

全ての文書にアクセスする(Use GetNextDocument)プロフィール

クラス          メソッド オペレーション コール 時間
DocumentCollection  GetNextDocument  1907 40

ここではGetnextDocumentは40msしか消費していません。

全ての文書にアクセスする(Use GetNthDocument)プロフィール
クラス         メソッド オペレーション コール 時間
DocumentCollection  GetNthDocument  1906 1665

結構違いますよね。。。なのでWhileループじゃないといけない理由は分かりませんが、とりあえずGetNextDocumentを使う理由はパフォーマンスが理由にある、と言う事は分かってもらえたのではないかと思います。

コメント

非公開コメント

Re: なぜGetNextdocumentなのか?

個人的には do until ... loop も好きです。
getFirstDocument() でどうせ最初の文書取らないといけないので。

なるほど

前置判定って観点では do until ... loop で書いても同じですよね。
 WENDって何となく覚えにくいから、do until ... loop もいいかもしれないですね。。