Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Code beschleunigen (https://www.delphipraxis.net/112938-code-beschleunigen.html)

Grolle 29. Apr 2008 23:26

Re: Code beschleunigen
 
Stimmt! Testen wir mal ...

stoxx 30. Apr 2008 02:30

Re: Code beschleunigen
 
nimm dochmal schrittweise jeden Befehl raus, und schau wo der Flaschenhals ist ..

propier doch mal:

Delphi-Quellcode:
if i Mod 10 = 0 then begin
    Label6.Caption := IntToStr(i);
    Label6.Refresh;
end;

Bernhard Geyer 30. Apr 2008 06:21

Re: Code beschleunigen
 
Ich würde darauf Tippen das 99% der Rechenzeit in den beiden Zeilen
Delphi-Quellcode:
        help := Sheet.Cells[j,13].Value;
        ...
        Sheet.Cells[j,13].Value := help;
da du einen COM-Out-Of-Process-Server verwendest. Falls du auch noch über Frühe Bindung gehst (Sheet: OleVariant) kannst du jedliche andere Optimierung vergessen. Hier solltest du über GetRange/SetRange arbeiten um den ganzen Block als Variant Array in deinen Adressraum holen. Leider kann ich dir keinen Sourcecode liefern da ich dies auch nur von einer Kaufkomponente habe. Alternativ könntest du native Excel-Format wie Flexel kaufen welche Exceldateien native laden können.

SirThornberry 30. Apr 2008 08:15

Re: Code beschleunigen
 
welche Werte haben bei dir arr[0] und arr[1]? Sind die beiden Werte gleich lang? Wenn ja - wie lang?

Sherlock 30. Apr 2008 08:21

Re: Code beschleunigen
 
Wie hast Du denn das Excel eingebunden, bzw. was genau ist Sheet? Wenn Sheet ein Variant ist, dann liegt da die Lösung. COM-Objekte als Variants verbraten enorm viel Zeit mit nichts tun.

Sherlock

RWarnecke 30. Apr 2008 09:27

Re: Code beschleunigen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Es gibt zwei Möglichkeiten :

1.) Die Unit in der angehängten Datei habe ich mal gefunden und es soll laut Beschreibung, ziemlich schnell gehen.
2.) Im Excel-Makrocode kannst Du so einen String-Replace durchführen
Code:
Set Intstring = "25=>35"
Intstring = WorksheetFunction.Substitute(Intstring, "=>", "")

jbg 30. Apr 2008 11:43

Re: Code beschleunigen
 
Was auch noch ein wenig Geschwindigkeit bring ist
Code:
ExcelApp.ScreenUpdating[0] := False;
try
  ...
finally
  ExcelApp.ScreenUpdating[0] := True;
end;

Grolle 30. Apr 2008 12:45

Re: Code beschleunigen
 
Hallo nochmal und Danke an alle,

nachdem meine Funktion in der letzten Nacht 8 h für 1000 (das war nur ein/Fünftel!) Datensätze
gebraucht hat, habe ich die betroffene Excel-Spalte als Textdatei gespeichert und nach Bearbeitung
einfach wieder in Excel eingefügt (zum Glück lagen keine Formatierungen bzw. Formeln
darauf).
Der Code macht die gesammte Liste jetzt in einer Minute:
Delphi-Quellcode:
  for i := 0 to sl.Count-1 do
  begin
    Label6.Caption := IntToStr(i);
    Label6.Refresh;
    if sl[i] <> '' then
    begin
      arr := explode(';',sl[i]);
      for j := 0 to nuList.Count-1 do
      begin
        help := StringReplace(nuList[j],arr[0],arr[1],[rfReplaceAll]);
        nuList[j] := help;
      end;
    end;
  end;
Unglaublich, was Excel da an Performance schluckt :shock:

Viele Grüße ...

Sherlock 30. Apr 2008 13:18

Re: Code beschleunigen
 
Das ist nicht unbedingt Excel, was da Performance schluckt. Wäre ja auch fatal.

Du solltest versuchen, so viel wie möglich mit den Excelroutinen zu erledigen, ansonsten bewegst Du zu viel zwischen Deiner App und Excel hin und her, und je nach Einbindung von Excel kostet das Performance.

Sherlock

Grolle 30. Apr 2008 13:21

Re: Code beschleunigen
 
Zitat:

Zitat von Sherlock
Das ist nicht unbedingt Excel, was da Performance schluckt. Wäre ja auch fatal.

Du solltest versuchen, so viel wie möglich mit den Excelroutinen zu erledigen, ansonsten bewegst Du zu viel zwischen Deiner App und Excel hin und her, und je nach Einbindung von Excel kostet das Performance.

Sherlock

Hi,

da hast du Recht und so wars auch gemeint. Am liebsten wäre es mir gewesen, wenn ich das über ein Macro hätte
regeln können, aber da hätte ich mich erst einarbeiten müssen.

Viele Grüße ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:43 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz