時間がなくても同様の問題を抱えている可能性がある人のために、トップに投稿された(申し訳ありません)回答。
ルール 1 は、いつものように、できる限りループから抜け出すことです。
2、TField var := ADODataSet.FieldByname() をループの外に移動します。 3、ADODataSet.DisableControls(); および ADODataSet.EnableControls(); ループ4の周りで、各行のstringGrid.Rows [r].BeginUpdate()およびEndUpdate()(コントロール全体では実行できません)これらのそれぞれが数秒削られましたが、「目よりも速く」になりました見える」に変更することで
loop
stringGrid.RowCount := stringGrid.RowCount + 1;
end loop
stringGrid.RowCount := ADODataSet.RecordCount;
ループの前に置く
+1、そして助けてくれたすべての人に心から感謝します。
(ここで、TChart の描画を最適化するために何ができるかを見ていきますが、これも遅いです ;-)
テーブルに約 3,600 行あるため、文字列グリッドに入力するのに 45 秒かかります。私は何を間違っていますか?
ADODataSet := TADODataSet.Create(Nil); ADODataSet.Connection := AdoConnection; ADODataSet.CommandText := 'SELECT * FROM 測定値'; ADODataSet.CommandType := cmdText; ADODataSet.Open(); while not ADODataSet.eof do 始める TestRunDataStringGrid.RowCount := TestRunDataStringGrid.RowCount + 1; MeasurementDateTime := UnixToDateTime(ADODataSet.FieldByname('time_stamp').AsInteger); DoSQlCommandWithResultSet('SELECT * FROM start_time_stamp', AdoConnection, resultSet); startDateTime := UnixToDateTime(StrToInt64(resultSet.Strings[0])); 経過時間:=測定日時 - 日時の開始; TestRunDataStringGrid.Cells[0、Pred(TestRunDataStringGrid.RowCount)] := FormatDateTime('hh:mm:ss'、経過時間); TestRunDataStringGrid.Cells[1, Pred(TestRunDataStringGrid.RowCount)] := FloatToStrWithPrecision(ADODataSet.FieldByname('inputTemperature').AsFloat); TestRunDataStringGrid.Cells[2, Pred(TestRunDataStringGrid.RowCount)] := FloatToStrWithPrecision(ADODataSet.FieldByname('outputTemperature').AsFloat); TestRunDataStringGrid.Cells[3, Pred(TestRunDataStringGrid.RowCount)] := FloatToStrWithPrecision(ADODataSet.FieldByname('flowRate').AsFloat); TestRunDataStringGrid.Cells[4, Pred(TestRunDataStringGrid.RowCount)] := FloatToStrWithPrecision(ADODataSet.FieldByname('waterPressure').AsFloat * convert); TestRunDataStringGrid.Cells[5, Pred(TestRunDataStringGrid.RowCount)] := FloatToStrWithPrecision(ADODataSet.FieldByname('waterLevel').AsFloat); TestRunDataStringGrid.Cells[6, Pred(TestRunDataStringGrid.RowCount)] := FloatToStrWithPrecision(ADODataSet.FieldByname('cod').AsFloat); ADODataSet.Next; 終わり; ADODataSet.Close(); ADODataSet.Free();
アップデート:
Function DoSQlCommandWithResultSet(const command : String; AdoConnection : TADOConnection; resultSet : TStringList): Boolean; 変数 i : 整数。 AdoQuery : TADOQuery; 始める 結果:=真; resultSet.Clear(); AdoQuery := TADOQuery.Create(nil); 試す AdoQuery.Connection:= AdoConnection; AdoQuery.SQL.Add(コマンド); AdoQuery.Open(); 私:= 0; while not AdoQuery.eof do 始める resultSet.Add(ADOQuery.Fields[i].Value); 私 := 私 + 1; AdoQuery.Next; 終わり; 最後に AdoQuery.Close(); AdoQuery.Free(); 終わり; 終わり;