メインコンテンツへスキップ

コンボボックスのデータ読み込み

コメント

23件のコメント

  • Tanda

    KMさん、

    コンボボックスでのリンクは照会リンクとほぼ同じ負荷ですので、10個くらいでそんなに重くなることはないと思うんですが。。。

    何となく、原因が他にあるような気がします。

    重いなあって感じる時の、サーバのメモリの使用状況はいかがですか?90%とか行ってませんか?タスクマネージャで確認してみてください。

  • KM

    Tandaさん

    タスクマネージャーを確認しながら動かしてみましたが特にメモリ使用率が跳ね上がったりはしませんでした。

    わかっていることとしては、親タスクに何かしらメインソース指定→コンボボックスを複数並べた子タスクを呼び出すと子タスクのタスク前までに時間がかかり、メインソースを指定していない親タスクから同様の子タスクを呼び出した場合は時間がかかりません。

    コンボボックス8個で7~9秒くらい待機時間があります。

    同僚に試してもらった時も同じような現象になったので、自分の環境のせいではないと思っていたのですが、何がボトルネックになっているのでしょうか…

  • Tanda

    KMさん、

    ということは、コンボボックスのリンク自体には負荷が掛かっていないということですね。

    メインソースのあるタスクから、その子タスクを呼び出すときの条件設定(位置付け等)には問題ありませんか?キーが正しく効いていなくて、総舐め検索になってしまっているとか。。。

  • KM

    Tandaさん

    テストプログラムでは、親タスクに適当なメインソース、子タスクにはメインソースを設定しておらず、コンボボックスのための変数を複数用意しているだけですが、上記の待機時間が発生します。

    テストしながらもう1つ分かったことは、データベースの設定→SQL→テーブルの存在チェックを外すと待機時間がかなり減るということです。

  • Ace_Nagashima

    KMさん おはようございます。

    私がコンボボックス用に行ってる処理を紹介させていただきます。
    以前、当フォーラムでどなたかに教えていただいた方法なので私のオリジナルでは有りません。
    納品した何社かのシステムで利用している方法です。

    メインプログラムのグローバル変数に10レコード分のキー値・データが収容できる以上の長さのテキスト項目を定義します。

    メインプログラムのタスク前処理でコンボボックスセット用のプログラム「コンボセットA」をCALLします。

    「コンボセットA」ではメインソースにコンボボックスにセットするテーブルを指定します。
    レコード後処理でグローバル変数にキー値・項目データをセットしていきます。
    1件目  LTrim (Str (キー-値,'#2Z'))&':'&RTrim (項目データ)
    2件目以降  RTrim (グローバル変数)&','&LTrim (Str (キー値,'#2Z'))&':'&RTrim (データ項目)
    グローバル変数には 1:分類A,2:分類B,3:分類C‥‥等のようにセットされます。
    ※対象テーブルはキーが数値2桁を想定しています。

    コンボボックスを表示するプログラムのフォームにフォームコントロールのコンボボックスを
    貼り付け、
    データ→セットする対象テーブルの項目(コンボボックスのキー値又は文字データの項目)
    選択項目リスト→ 1,2   式でグローバル変数を指定
    表示項目リスト→ 1,2   式でグローバル変数を指定

    以上の方法で各種プログラムで同じテーブルのコンボボックスを利用しています。
    コンボボックス用にテーブルを読み込むのはメインプログラム起動時の初回のみですので
    待ち時間が発生することは無いと思います。

     

  • Ace_Nagashima

    補足です。
    前記の方法はV10、Unipaas、xpa3で行っています。xpa4では実績が無いことをお断りしておきます。

  • KM

    Nagashimaさん

     

    ありがとうございます。

    たしかにそのやり方でしたら、初回の読み込みだけで済みますね。

    今回の現象が私の環境や設定が要因なら何か改善したいのですが、仕様として時間がかかるということでしたらご教示頂いた方法でやってみようと思います。

  • Tanda

    KMさん、

    「テーブルの存在チェック」はすべてのプログラムのパフォーマンスに対して有効ですので、ある程度は早くなると思います。

    ただ、親タスクにメインソースがあるか無いかの違いで速さが変わるというのが、ちょっと腑に落ちませんね。。。

  • nkmt

    1フォームに10個ほどのコンボボックスで、コンボボックスにデータを指定しているとの事ですが、コンボボックスに表示される件数は何件ぐらいなのでしょうか?

  • nkmt

    売上明細データ 56万件をメインソースにして
     得意先コードで 得意先マスタ(450件)
     担当者コードで担当者マスタ (10件)
     商品コードで商品マスタ   (8000件)
     拠点コードで拠点マスタ   (1件) をコンボボックス表示する
    スクリーンモードのオンラインタスクを実行すると、データが表示されるまでに
    9秒~10秒ぐらいかかりました。
    uniPaaS V1 Plus、xpa 3.2で同じプログラムを実行してみましたがどちらも似たような速度でした。
    SQL Serverです。
    (商品コード、商品マスタを削ったら即開きました。)

  • KM

    nkmtさん

    テストプログラムですが、コンボボックス10個で表示件数は合計40程です。

  • AY001

    KMさん

    SQLSERVERへの接続はIPアドレスを指定していますか?

    Windows11 24H2環境でサーバー名を使用してSQLSERVERに接続していると極端に遅くなる現象が発生しました。

    その時はIP指定またはhostsの設定で回避できました。

    24H2になったら遅い – Magicユーザーズフォーラム

  • KM

    AY001さん

    ありがとうございます。

    SQL Serverはサーバー上ではなくローカルのEXPRESSを使用しています。

    納品時はサーバー上に構築しますので、参考にさせて頂きます。

  • nkmt

    コンボボックスにデータを指定している訳ですが、範囲も指定がありますか?

  • KM

    nkmtさん

    範囲指定はなく、純粋にレコード数が数行程度のものをつかってテストしています。

  • KM

    本件、SQL Serverのexpressでテストしていたのですが、standard上の別のデータですが、同じような条件で試したところ早かったです。メモリ使用制限の問題なのでしょうか。

  • nkmt

    Express上のデータを
    Standardへ復元して同じテーブルでの比較も良いのかもしれませんね。

  • Ace_Nagashima

    Standardでは一回読み込んだデータはメモリー内に残されているみたいで、何度も読み込み様な処理では
    処理が早くなっているようでした。
    ExpressからStandardにアップグレードした顧客での体感速度は倍以上早く感じました。
    Expressはメモリー使用量が1GB迄だったので、データボリュームが大きいシステムではキャッシュが
    効きにくいのかもしれませんね。

  • nkmt

    Ace_Nagashimaさん
    私のユーザー様はExpressからStandardへの乗り換えがほぼなかったり
    ExpressからStandardへの乗り換えはハード交換の時だったりで
    両者の違いを体感する機会が少ないですが、体験談を教えてくださり
    ありがとうございます。

  • KM

    Nagashimaさん

    貴重な情報を教えて頂きありがとうございます。

    今回はユーザ側でSQL Serverをご用意いただく予定になっておりますので、頂いた情報を交えてご説明しようと思います。

  • Tanda

    KMさん、

    それは、同じマシン上での比較でしょうか?どれとも別マシン上にあるStandard版との比較でしょうか?

    特定のWindows Updateが入っているかいないかの違いも、可能性としてあるような気がします。

     

  • KM

    Tandaさん

    同じPC上での比較です。

    時間ができたら共通のDBを使ってそれぞれのSQL Serverでの速さを比較してみたいと思います。

  • KM

    先ほど同じデータを使って同じプログラムを動かしてみましたが、Standardの方はほぼ待ち時間がありませでした。Expressだとコア数制限があるのでクエリを並列処理で捌けず待ち時間が長くなるのでしょうか。キャッシュが効くかの差もありそうです。

    皆様色々とご教授頂きありがとうございました。

サインインしてコメントを残してください。