У меня есть функция, работа которой заключается в преобразовании 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;
Update One
Я думал об использовании IXMLDOMDocument
, чтобы создать HTML как XML.Но потом я понял, что окончательный HTML-код будет xhtml
, а не html
- небольшая, но важная разница.
Обновление два
Статья базы знаний Microsoft: КакУлучшение производительности конкатенации строк