【发布时间】:2011-03-01 17:35:44
【问题描述】:
我有一个函数,他的工作是将 ADO Recordset 转换为 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 - 一个微妙但重要的区别。
更新二
【问题讨论】:
标签: delphi performance delphi-5 widestring