我有一个功能是将 ADORecordset
转换为 html:
class function RecordsetToHtml(const rs: _Recordset): WideString;
该函数的核心涉及大量宽字符串连接:
while not rs.EOF do
begin
Result := Result+CRLF+
'<TR>';
for i := 0 to rs.Fields.Count-1 do
Result := Result+'<TD>'+VarAsWideString(rs.Fields[i].Value)+'</TD>';
Result := Result+'</TR>';
rs.MoveNext;
end;
对于几千个结果,该函数所花费的时间,任何用户都会感觉到,运行时间太长了。Delphi Sampling Profiler显示99.3%的时间用于宽字符串连接 (@WStrCatN
和@WstrCat
)。
任何人都可以想出一种改进宽字符串连接的方法吗?我认为 Delphi 5 没有任何类型的字符串生成器。并且Format
不支持Unicode。
并确保没有人试图偷懒:假装你正在实现接口:
IRecordsetToHtml = interface(IUnknown)
function RecordsetToHtml(const rs: _Recordset): WideString;
end;
更新一
我想过使用IXMLDOMDocument
, 将 HTML 构建为 xml。但后来我意识到最终的 HTML 将是xhtml
而不是html
- 一个微妙但重要的区别。
更新二
Microsoft 知识库文章:如何提高字符串连接性能