问题如下:
在以下程序中
***********************************************************************************************
procedure TForm1.WriteLog(sLog: String);
Var
 sDate, sDirName, sInfo : String;
 sFName        : OleVariant;
 fLog          : TextFile;
begin
 if w_log='true'  then//如果写入标识为'true',则写入log中
 begin
    sDate := FormatDatetime('YYYYMMDD', Now());
    Try
        sDirName := 'log\';
        If Not DirectoryExists(sDirName) Then CreateDir(sDirName);
        //sFName   := '..\' + sDate + '.Log';
        sFName   := sDirName+sDate + '.Log';
        AssignFile(fLog, sFName);
        if Not FileExists(sFName) then ReWrite(fLog)
        else Append(fLog);
        sInfo := FormatDatetime('HH:NN:SS:ZZZ', Now()) + ':' + sLog;
        WriteLn(fLog, sInfo);
        sendpack(sLog);
        CloseFile(fLog);
    Except
    End;
 end;end;
***********************************************************************************************
在实际使用时,不知道是写入文件的问题,还是其他问题,总是会有1秒左右的延迟,是否以上代码有问题呢?

解决方案 »

  1.   

    进行暂时性的缓存,等得到一定量之后进行写入。写入的时候采用Overlapped机制,异步执行。
      

  2.   

    WriteLn(fLog, sInfo); 
    下面加一句Flush(fLog)试试
    或者用TFileStream来写,日志中间写入#10#13换行
      

  3.   

    日志不能太大了。
    太大不但会有延时,还会引起I/O错误(致命错误!)造成程序崩溃的。要小心!
    楼主可以只记录出错信息啊。
    日常操作等日志信息,最好用DATABASE来完成。
      

  4.   

    日志不能太大了。
    太大不但会有延时,还会引起I/O错误(致命错误!)造成程序崩溃的。要小心!
    楼主可以只记录出错信息啊。
    日常操作等日志信息,最好用DATABASE来完成。