<< 工事進行基準 | main | 優先度のつけ方 >>

スポンサーサイト

一定期間更新がないため広告を表示しています


  • 2010.11.01 Monday
  • -
  • -
  • -
  • -
  • by スポンサードリンク

BizBrowser 性能改善

今日はBizBrowserの性能改善にPonitをメモ書きします。

FlexViewオブジェクトの中身を操作するときは、毎行GetRowするのではく、MoveNextでアクセスする。
(Bizの宝箱から抜粋)
≪引用≫
for文内にGetRowの記述があると、都度FlexRowオブジェクトと全列に対応するFlexCell
アクセッサオブジェクトが生成されますので、1回の処理につき、行数×(列数+1) の
オブジェクトが生成されます。


■修正前
/* 重複チェックを行う処理 */

var row2 = FlexView1.GetRow( 0 );      /* (1) */
String s;
while( !row2.end ) {
    s = row2.FlexText1.value;
    for( var i = 0; i < FlexView1.RowCount; i++ ) {
        var row = FlexText1.GetRow( i );   /* (2) */
        if ( s == row.FlexText1.value ){   /* (3) */
            /*エラー処理*/
        }
    }
    row2.moveNext();
}

■修正後
/* 重複チェックを行う処理 */
var row2 = FlexView1.GetRow( 0 );

var s;
while( row2.position < FlexView1.RowCount - 1 ) {
    s = row2.FlexText1.value;
    var row = FlexView1.GetRow( row2.position + 1 );
    while( !row.end ) {
        if ( s == row.FlexText1.value ) {
            /*エラー処理*/
        }
        row.MoveNext();
    }
    row2.MoveNext();
}
(1) で1行目(先頭行)を取得しています。
(2) で i は0ですから再び(1)と同じ行を取得します。
(3) は(1)と(2)つまり同じ行の同じ列を比較しているので最初はエラーとなります。


▲ブジェクトを参照する場合は、
絶対パスで指定するのではなく、相対パスで指定する。

≪例≫
Form Hoge {
   Form HogeHoge {
      TextBox Text1 {
           Function OnLostFocus( e ) {
                /* Text2の内容を編集 */
                /* ■絶対パスで指定 */
                Hoge.HogeHoge.Text2.Value = "Hello";

                /* ■相対パスで指定 */
                ^.Text2.Value = "Hello";
           }
      }
      TextBox Text2 {}
   }
}
このように相対パスで指定することで、オブジェクトに対するアクセス速度が向上します。

Getする基点オブジェクト
どういった理由はわかりませんが、Getする基点オブジェクト(ここでは適当に命名しています)の階層を深くすることで、処理速度が向上します。
≪例≫
Form Hoge {
   Form HogeHoge {
      TextBox Text1 {}
      TextBox Text2 {}
      Form HogeHogeHoge {}
   }
}

このようなフォームクラスがあったときに、モーダルダイアログを表示する場合、Hoge.Get("test.crs");とするより、HogeHogeHoge.Get("test.crs");とするほうが、処理速度が向上します。
(環境に依存するかもしれませんが、今のところ向上しています)

ぅブジェクトツリー(勝手に命名しています)の構造をできるだけ簡素化する。
例えば、オブジェクトに独自のプロパティのようなものを定義したいとします。
≪例(必須チェックフラグを追加)≫
TextBox Text1 {
   Number HissuCheck = $FALSE;
   Function OnFocusOperation(e) {
       if ( this.HissuCheck ) {
           if ( this.Value == "" ) {
               //.MessageBox("入力してください");
           }
       }
   }
}

上記のように、テキストボックスに独自のプロパティのような扱いができる変数として定義することはよくあると思います。この場合のように一つだけ(HissuCheck)プロパティもどきを作成する場合はよいのですが、量が増えてくると処理速度が低下します。
≪例≫
TextBox Text1 {
   Number HissuCheck = $FALSE;
   Number AutoTrim = $FALSE;
   Number AutoZeroPadding = $FALSE;
   String Roll = "1";
   Function OnFocusOperation(e) {
       if ( this.HissuCheck ) {
           if ( this.Value == "" ) {
               //.MessageBox("入力してください");
           }
       }
   }
}

このようにオブジェクトに持たせるプロパティもどきを増やしていくと、オブジェクトのDelete処理やGet処理が遅くなるようです。どういった理由かはわかりませんが、オブジェクトツリーを複雑にすればするほど、この現象が発生します。
このような場合を想定して、以下のようにあらかじめ一つの変数で管理すると解決できます。

TextBox Text1 {
   Array Properties;
   this. Properties ["HissuCheck"] = $FALSE;
   this. Properties ["AutoTrim"] = $FALSE;
   this. Properties ["AutoZeroPadding"] = $FALSE;
   this. Properties ["Roll"] = "1";
   Function OnFocusOperation(e) {
       if ( this.Properties ["HissuCheck"] ) {
           if ( this.Value == "" ) {
               //.MessageBox("入力してください");
           }
       }
   }
}



スポンサーサイト


  • 2010.11.01 Monday
  • -
  • 12:34
  • -
  • -
  • -
  • by スポンサードリンク

コメント
コメントする









この記事のトラックバックURL
トラックバック
関連会社
株式会社ツクル
誠意と創意で技術を社会に活かすIT企業
          
          
時計
calendar
     12
3456789
10111213141516
17181920212223
24252627282930
31      
<< December 2017 >>
Amazon
selected entries
categories
archives
recent comment
recommend
links
profile
search this site.
sponsored links
others
mobile
qrcode
powered
無料ブログ作成サービス JUGEM
2008JUGEMキャラコングランプリ
キャラクターデザイン:磯崎洋助/「おしゃれひつじ」