我軟處理傳入的字符串(來自Telnet或HTTP或...),並且我必須用Delphi XE2編寫文本文件才能處理字符串。由於有時字符串可能會導致程序崩潰,因此我需要確保在我的文件中包含字符串。所以我打開/關閉每個傳入的字符串的文件,我有一些性能問題。通常(對於我的代碼測試)8秒文本文件在德爾福的書寫表演
我的代碼在這裏,有沒有辦法來改善保持函數的perfs? (用於測試只需創建一個帶按鈕的表單:Button1,帶有OnClick事件& a Label:lbl1)。
Procedure AddToFile(Source: string; FileName :String);
var
FText : Text;
TmpBuf: array[word] of byte;
Begin
{$I-}
AssignFile(FText, FileName);
Append(FText);
SetTextBuf(FText, TmpBuf);
Writeln(FText, Source);
CloseFile(FText);
{$I+}
end;
procedure initF(FileName : string);
Var FText : text;
begin
{$I-}
if FileExists(FileName) then DeleteFile(FileName);
AssignFile(FText, FileName);
ReWrite(FText);
CloseFile(FText);
{$I+}
end;
procedure TForm1.Button1Click(Sender: TObject);
var tTime : TDateTime;
iBcl : Integer;
FileName : string;
begin
FileName := 'c:\Test.txt';
lbl1.Caption := 'Go->' + FileName; lbl1.Refresh;
initF(FileName);
tTime := Now;
For iBcl := 0 to 2000 do
AddToFile(IntToStr(ibcl) + ' ' + 'lkjlkjlkjlkjlkjlkjlkj' , FileName);
lbl1.Caption := FormatDateTime('sss:zzz',Now-tTime);
end;
打開/關閉文件是一個耗時的操作。爲什麼不打開它一次,並將文件指針保存在內存中?也可能在文本文件的使用上存在滯後性,嘗試使用TFileStream並通過字節塊寫入數據。要確保數據被推送到文件,使用FileStream.Flush –
你應該保持打開文件,一旦你已經初始化它,或者傳遞FText變量或保持它作爲一個全局變量... – ComputerSaysNo
在我看來,你正在治療一種症狀不是原因...找出崩潰發生的地方,試着......除了它周圍的塊,並處理關閉那裏的文件 - 然後重新提出例外,如果你死在那一點。 – Despatcher