Delphi BASE64单元EncdDecd的修改
Delphi BASE64单元EncdDecd的修改 EncdDecd.pas两个函数声明: procedure EncodeStream(Input,Output: TStream); 对于Output参数,如果是TMemoryStream,效率真是太糟糕了,测试发现,编码一个5M多的文件,要十几秒钟! 但如果是TStringStream,只要0.2~0.3秒! WHY? 因为TMemoryStream在不断地调用Write方法,不断地向Windows要求分配内存!从而导致性能下降!而TStringStream和TFileStream则没有这个问题。 怎么办? 可以一次性给TMemoryStream分配好内存空间。假设编码前的字节数为X,那麽编码后的字节数为 (X + 2) div 3 * 4 关于回车换行符的修改,找到下面这段代码: if K > 75 then begin BufPtr[0] := #$0D; // 回车 BufPtr[1] := #$0A; // 换行 Inc(BufPtr,2); K := 0; end; 每隔76个字符,就强制回车换行。将其注释掉, 因为这其实是没什么用。将修改的单元另存为EncdDecdEx,以后就使用它了。 在编码/解码前对Output参数的TMemoryStream事先设置缓冲区大小,避免分多次向WINDOWS申请内存分配: uses encddecdEx; var Input,Output:TMemoryStream; begin Input:=TMemoryStream.Create; try Input.LoadFromFile(‘c:aaa.txt‘); Output:=TMemoryStream.Create; try Output.Size:=(Input.Size + 2) div 3 * 4; EncodeStream(Input,Output); finally Output.Free; end; finally Input.Free; end; end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |