Entwickler-Ecke

Dateizugriff - Wie am besten TFileStream.Write?


WeBsPaCe - Fr 24.06.11 16:22
Titel: Wie am besten TFileStream.Write?
Hi, gibts einen Grund für a statt b oder andersherum?


Delphi-Quelltext
1:
2:
3:
4:
5:
var
  filename, data: AnsiString;
begin
  with TFileStream.Create(filename, fmCreate) do
    begin


  1. Delphi-Quelltext
    1:
    Write(data[1], Length(data));                    


  2. Delphi-Quelltext
    1:
    Write(PChar(data)^, Length(data));                    


Delphi-Quelltext
1:
2:
3:
    Free;
  end;
end;


Dankeschön.


jaenicke - Fr 24.06.11 16:36

Bei a wird zusätzlich UniqueString aufgerufen um sicherzustellen, dass der Referenzzähler nicht größer als eins ist (also mehrere Referenzen existieren). Deshalb ist das ein wenig langsamer.

Zudem halte ich die zweite Version auch für sinnvoller von der Syntax her:
Ich nehme den Pointer auf ein Zeichen und dereferenziere diesen Pointer.

Nebenbei wird das auch in den VCL-Quelltexten so benutzt.


WeBsPaCe - Fr 24.06.11 23:19

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Zudem halte ich die zweite Version auch für sinnvoller von der Syntax her:
Ich nehme den Pointer auf ein Zeichen und dereferenziere diesen Pointer.

Geschmackssache: wenn man String als Array of Char sieht?

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Bei a wird zusätzlich UniqueString aufgerufen um sicherzustellen, dass der Referenzzähler nicht größer als eins ist (also mehrere Referenzen existieren). Deshalb ist das ein wenig langsamer.

Okay. Macht Sinn. Dann wollen wir mal optimieren. ;-)

Danke!


jaenicke - Sa 25.06.11 05:39

user profile iconWeBsPaCe hat folgendes geschrieben Zum zitierten Posting springen:
Geschmackssache: wenn man String als Array of Char sieht?
Dass das auch Sinn macht, wenn man es weiß, ist klar.

Aber wenn man nicht weiß was da passiert, denkt man eher, dass nur das eine Zeichen übergeben wird. ;-)