Autor Beitrag
fuggaz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 106



BeitragVerfasst: Di 21.08.07 17:49 
Hallo,
Meine Frage:
Ist es schneller den Inhalt eines Memos in eine Variable zu schreiben und diese dann auszulesen(wenn man sie für jeden Buchstaben nocheinmal lesen muss) oder wird das Memo auch so gehandhabt und alles wäre doppeltgemoppelt?

Google spuckt mir dazu leider nichts aus.


mfg fuggaz
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 21.08.07 18:42 
Moin und :welcome: im Forum!

user profile iconfuggaz hat folgendes geschrieben:
Ist es schneller den Inhalt eines Memos in eine Variable zu schreiben und diese dann auszulesen(wenn man sie für jeden Buchstaben nocheinmal lesen muss) oder wird das Memo auch so gehandhabt und alles wäre doppeltgemoppelt?

Meinst du sowas?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
// nicht gut
for i := 1 to Length(Memo1.Text) do
  if (Memo1.Text[i] = 'A') then

// besser so
S := Memo1.Text;
for i := 1 to Length(S) do
  if (S[i] = 'A') then

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 22.08.07 01:11 
Solange du im Memo nichts änderst, ist die Geschwindigkeit nicht erheblich langsamer als bei einer Variable. Da jedoch Memo1.Text eine Eigenschaft (und eben keine Variable) ist, wird diese dennoch bei jedem Zugriff (also bei jedem Buchstaben) erneut ausgelesen, so dass die Geschwindigkeit dennoch langsamer als bei einer Variablen ist.
Grund:
Du willst Memo1.Text[i] lesen. Was passiert ist: Es wird Text gelesen, dafür gibts dann GetText oder eine ähnliche Funktion. Dann wird der i-te Buchstabe genommen. Es wird also jedesmal diese Getter-Funktion aufgerufen.

Den größten Performanceverlust hast du, wenn du auch noch im Memo etwas änderst statt in einer Variablen (deren Inhalt dann am Ende erst ins Memo geschrieben wird z.B.). Der Grund ist, dass bei jedem schreibenden Zugriff auf einen Buchstaben oder den kompletten Text im Memo dieses neu gezeichnet werden muss (es wird ja immer der Setter der Eigenschaft Memo1.Text ausgelöst). Und alle grafischen Operationen sind generell sehr schlecht für die Performance, insbesondere, wenn man sie in einer Schleife (in diesem Fall unbeabsichtigt) auslöst.
fuggaz Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 106



BeitragVerfasst: Mi 22.08.07 14:55 
OK Danke:)
Frage beantwortet.