掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
FMXでTStringGrid処理が遅い (ID:48597)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
auさん、igyさん、takeさん、ありがとうございます。 おかげ様まで、処理が格段に速くなりました。 BeginUpdate/EndUupdate を挿入してみました。挿入箇所は以下の通りです。 procedure TForm2.Button1Click(Sender: TObject); var sCol: TStringColumn; c, r: Integer; t: TDateTime; begin t := Time(); StringGrid1.BeginUpdate(); for c := 1 to TEST_COL do begin sCol := TStringColumn.Create(StringGrid1); sCol.Name := 'col' + IntToStr(c); sCol.Header := 'テスト' + IntToStr(c); sCol.Width := 60; StringGrid1.AddObject(sCol); end; with StringGrid1 do begin RowCount := TEST_ROW; for r := 0 to RowCount - 1 do for c := 0 to ColumnCount - 1 do Cells[c, r] := Format('[%d, %d]', [c, r]); end; StringGrid1.EndUpdate(); Label1.Text := TimeToStr(Time() - t); end; procedure TForm2.Button2Click(Sender: TObject); var sCol: TStringColumn; c: Integer; t: TDateTime; begin t := Time(); Grid1.BeginUpdate(); for c := 1 to TEST_COL do begin sCol := TStringColumn.Create(Grid1); sCol.Name := 'col' + IntToStr(c); sCol.Header := 'テスト' + IntToStr(c); sCol.Width := 60; Grid1.AddObject(sCol); end; Grid1.RowCount := TEST_ROW; Grid1.EndUpdate(); Label2.Text := TimeToStr(Time() - t); end; TStringGridのBeginUpdate/EndUupdateは、よく分からなかったので、参考サイトにある StringGrid1.Cols[ i ].BeginUpdate; StringGrid1.Cols[ i ].EndUpdate; ではなくて、 StringGrid1自体に続けました。 結果、 TEST_ROW = 550; TEST_COL = 1550; の場合で、 TStringGridの方が、13秒 TGridの方で、6秒 でした。 次に表示のスクロールですが、こちらは少しタイムラグがあり、 スクロールバーの矢印クリック:1〜2秒後に移動 スクロールバーの場所クリック:1〜2秒後に移動 スクロールバーのカーソルドラッグ:クリックを放してから1〜2秒後に移動 と言う感じです。 ただ、これらは全て、XE6での結果です。 ”DELPHI Berlin 10.1 Starter Edition”をインストールして同じ試験を行いました。 uses節に、”FMX.Grid.Style”の追加を促された以外は問題なく実行されました。 結果は、 TStringGridの方が、1分4秒 TGridの方で、1分2秒 でした。 一方で、スクロールは早いです。 スクロールバーの矢印クリック:クリック直後に移動 スクロールバーの場所クリック:クリック直後に移動 スクロールバーのカーソルドラッグ:配列サイズの影響もあると思いますが、 Row方向はリアルタイムで移動、Col方向は若干遅れますが、 ドラッグしたカーソルに追随します Colも追加も早くて、スクロールも早いと言う分けにはなかなかいきません。 XE6でスクロールに時間がかかるのは何故でしょう? プログラムしていない箇所なので、手の出しようがないですよね。 なお、上記試験は全て、 DELL Precision T1650, Intel Core i3 3.3GHz, RAM:24GB 64bit Windows 10 Pro での結果です。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.