喫茶XRAYトップページ


[9221] TComboBoxへのデータ追加時間返信 削除
2015/9/15 (火) 15:32:25 snail
VB6アプリをDelphiにコンバートしています。
開発環境は XE7 です。
アプリは完成したのですが動作速度が遅くて困っています。
問題箇所は単純に TComboBox にデータを追加するところです。

問題を単純にするためにテストプログラムを作成しました。

=========== ↓Delphi テストプログラム ===========
procedure TForm9.SpeedButton3Click(Sender: TObject);
const
  CnsMax = 5000;
var
  WIdx: Integer;
  WStr : String;
  WStringList : TStringList;
begin
    ComboBox1.Items.Clear;
    TimeDisp( 'Start Combo' );
    for WIdx := 1 to CnsMax do
    begin
      WStr := IntToStr( WIdx );
      WStr := WStr  + ' , ' + 'aaa'
           +  WStr  + ' , ' + 'BBB';
      ComboBox1.Items.Add( WStr );;
    end;
    TimeDisp( 'End Combo' );
end;

procedure TForm9.TimeDisp( ArgS : String );
begin
  Memo1.Lines.Add( ArgS + Formatdatetime ( 'hh:nn:ss', Now ) );
  Application.ProcessMessages;
end;

=========== ↑Delphi テストプログラム ↑===========
実行結果
>Start Combo15:20:42
>End Combo15:21:09

約27秒かかっています。
VBで実行すると1秒もかかりません。
何かヒントを下さい。

よろしくお願いします。
なおここは、
「そんなつまらない質問をするところではありません。」
といったお返事でも結構です。HELP!



[9222] Re:TComboBoxへのデータ追加時間返信 削除
2015/9/15 (火) 15:37:40 snail
▼ snailさん
別の仮想マシンで同じ環境 Win7X64 + XE7 でも1秒ですね。




[9223] Re2:TComboBoxへのデータ追加時間返信 削除
2015/9/15 (火) 16:38:32 snail
▼ snailさん
> ▼ snailさん
> 別の仮想マシンで同じ環境 Win7X64 + XE7 でも1秒ですね。


原因が判明しました。みなさんの予想通りデバッガオプションでした。
 
 ツール−オプション−デバッガオプション−メッセージ−ウィンドウメッセージにチェックが入っていた。
 ※ チェックを外した後、Delphi再起動しないと遅いまま。

ここに書き込みしたらすぐ解決したけど、
4日から別の仕事の合間をやりながら、ずーとはまっていました。




[9224] Re3:TComboBoxへのデータ追加時間返信 削除
2015/9/15 (火) 17:28:18 Mr.XRAY
▼ snailさん

>  ツール−オプション−デバッガオプション−メッセージ−ウィンドウメッセージにチェックが入っていた。
>  ※ チェックを外した後、Delphi再起動しないと遅いまま。


なるほど,IDE からの実行ですね.
描画というのは,何でも時間かかりますからね.

> ここに書き込みしたらすぐ解決したけど、

こういうことはよくあります.不思議なんですが,
心理学的にはあるらしいです.
専門用語は忘れてしまいましたが,心理的に頭の中が切り換わるのだそうです.
でも,この書き込み自体は参考になりますです.サンクスです.

> 4日から別の仕事の合間をやりながら、ずーとはまっていました。

なんと慰めていいのやら.
気を落として,じゃなくて,気を落とさずに... (^^;


[9225] Re4:TComboBoxへのデータ追加時間返信 削除
2015/9/15 (火) 17:56:42 Mr.XRAY
> 心理学的にはあるらしいです.

脳科学的かも知れません.


[9226] Re4:TComboBoxへのデータ追加時間返信 削除
2015/9/15 (火) 18:51:07 snail
▼ Mr.XRAYさん
 
> なんと慰めていいのやら.
> 気を落として,じゃなくて,気を落とさずに... (^^;


とりあえず目の前の問題点から逃げて、DBLookupComboBox なんかの使い方
を調べたり、TMS Software のコンポを動かしたら寄り道をしていました。
いよいよ代替え手段が見つからずに VB でテストプログラムを作ったら
びっくり。ComboBox 早いじゃん。

以前、時間が有ったときに色々触ってデバッグオプションをいい加減に
触ったのが敗因でした。

 


[9227] Re5:TComboBoxへのデータ追加時間返信 削除
2015/9/16 (水) 16:14:41 Mr.XRAY
▼ snailさん

> びっくり。ComboBox 早いじゃん。

私なんか TComboBox の OnEnter でデータベースからクエリーで,
表示項目を読み込んで表示していました.
ストレスを感じることはなかったですね.
(もはや過去形...)


[9228] Re6:TComboBoxへのデータ追加時間返信 削除
2015/9/16 (水) 16:28:18 Mr.XRAY
> 私なんか TComboBox の OnEnter でデータベースからクエリーで,
> 表示項目を読み込んで表示していました.


データベース,つまり業務アプリの開発は,Delphi を使い始めたのと
同時なわけですが,最初は苦労しました.

snailさんの「遅い」ではないですが,使用するフォームが増え,
使用するコンポも増え,EXE が巨大になり,EXE の起動が遅くなり...
データベースの接続や初期化の間,進捗ダイアログ等を表示するような
ことをやりました.
利用者から特に不満はなかったのですが,気に食わない.

で,人がマウスやキーで操作する時間というのは,内部の処理に比べれば,
非常に遅いわけです.
その間に,裏(スレッド等) で接続,初期化する方式に変更しました.

ネット上の,コーディングやクエリー,インデックスによっては,
処理の速度が何十倍にもなる.という記事を読んで,
「そうかい ? そうなの ? よし!! やってやろうじゃないの」
という感じでやってきましたね.
今考えると「バカ」です.ハイ.


INCM/CMT
Cyclamen v3.82