【GeneXus】速度改善について

今日はGeneXusで作成したシステムの速度改善について書こうと思います。

GeneXusでシステムを作っていると、どうしても速度が出ない場合ってありますよね。

大量更新とかは非同期にして実行するとかで対応できるのですが、一覧画面で見ているテーブルにデータがたくさん入っていると、表示まで時間がかかる場合があります。

基本的には検索ボタンを押してからデータが画面表示されるまで、長くても3秒までと言われています。
それ以上となると速度改善が必要になってきます。

一覧画面はGridに置いてある項目がすべてAttributeや変数の場合が一番早いです。
(ベーステーブルのあるGrid)
GeneXus上の定義は下記のような感じです。

実際に動かした場合は下記のような感じですね。

商品データとしては5万件あります。
ただ1ページに表示するデータが10件なので、10件のみ取得するSQLを発行してくれます。

これをSDTGridにして、ForEachでSDTに格納して表示すると、5万件取ってきてメモリ上にもすべて保持するので時間もかかるし、メモリエラーになる可能性もあるのでオススメしません。
(最大で数千件とかのデータならSDTGridでも問題なし)

どうしても大量データでSDTGridにしたい場合は、検索条件に必須項目を用意して全件検索にならないようにしたり、最大取得件数を決めて、それ以上取ってこないようにする等の仕様決めが必要となります。

もしSDTGridにしたい理由が、複数のテーブルからデータを取得して表示したいのであれば、ダイナミックトランザクションを作成してViewからAttributeGridを作るのもアリです。

最終的にダイナミックトランザクションも難しいようなJoinでデータを持ってきたい場合は、自分で対象のDBMS上にViewを作って、それをDBRETでGeneXusに持ってきてそのトランザクションのAttiributeGridを作るしかないかもしれません。
View作成のSQL文はGeneXusの管理外になってしまうので、あくまでも最終手段ということで。

Blog一覧へ