1. 经过实践发现,先把文件流TFileStream独到TMemoryStream中,速度要快一点。
如果一边MemoryStream读一边写MemoryStream,例如我用需要加密解密一个文件,
不要一边从一个MemoryStream读,一边加密写到另一个MemoryStream中;最好在同一个MemoryStream中操作,即read一块,进行加密,然后seek(-n, soCurrent),然后write。
这样效率差不多要提高十倍左右。
前面用两个MemoryStream加密一个6M的文件大概需要8.x(S),而用一个MemoryStream加密的时候只需要1S!
2. 如果用文件流打开一个文件,再从头开始往这个文件流中写数据,注意这个写的过程是覆盖的过程。因此如果原文件比后写入的文件长的话,则会产生冗余的脏数据。为此,可以先判断文件是否存在,如果存在文件,将文件删除,然后以fmCreate模式打开文件流。如下:
if FileExists(ParaSaveFilePath) then
DeleteFile(ParaSaveFilePath);
OutFs := TFileStream.Create(ParaSaveFilePath, fmCreate);