Delphi-Quellcode:
procedure TMCBasisExport.Add(AText:
string);
var
buf :
string ;
begin
if FS <>
nil then begin
buf := AText+#13#10 ;
FS.
Write(buf[1],length(buf)) ;
end else begin
raise exception.Create('
Datei kann nich beschrieben werden.');
end ;
end;
das ist ineffizient und unleserlich.
Delphi-Quellcode:
procedure TMCBasisExport.Add(
const AText:
String);
const
CR: PChar = #13#10;
begin
if FS =
nil then
raise exception.Create('
Kein Dateistream erzeugt.');
FS.
Write(PChar(AText)^, Length(AText));
FS.
Write(CR^, 2);
end;
Die Contentation in deinem Source mit Buf := AText + #13#10 führt minimal vier langwierige und unnötige Operationen aus, die du so nicht siehst:
1.) Buf = AText -> setze @Buf^ = @AText^, interner AText.RefCounter +1 erhöhen
2.) Buf = Buf + #13#10
2.1.) alloziere neuen Speicher mit Length(AText) + 4
2.2.) kopiere Inhalt von AText == Buf nach neuen Speicher
2.3.) AText.RefCounter -1
2.4.) setze Buf auf neuen Speicher
2.5.) falls (Length(ABuf) + 4) mod 16 < 2 dann
2.5.1.) alloziere neuen Speicher mit Length(Buf) + 2 um #13#10 hinzufügen zu können
2.5.2.) kopiere nun Buf nach neuen Speicher
2.5.3.) dealloziere alten Speicher im Buf
2.5.4.) setze Buf auf neuen Speicher
2.6.) setze Länge vom String Buf auf ++2
2.7.) kopiere #13#10 ans Ende von Buf
2.8.) Buf.RefCounter -1
2.9.) Speicher in Buf freigeben
All das passiert bei Buf := AText + #13#10;
In meinem Beispiel passiert dagegen folgendes:
0.) nichts, kein unnötiges Stringhandling
Gruß Hagen