Ist es normal, dass Widestrings so viel langsamer sind?
ja
AnsiString und ab Delphi 2009 auch UnicodeString:
- delphieigener Typ
- Referenzzählung
- "optimierte" Speicherverwaltung über den Delphi-MemoryManager (neuerdings FastMM)
WideString:
- Umleitung auf
WinAPI
-
keine Referenzzählung
- (unbekannte) Speicherverwaltung über OleAuth32.dll
SysAllocStringLen
SysReAllocStringLen
SysFreeString
SysStringLen
Wozu Cardinal, wenn du am Ende alles quasi auf 1 Byte runterkürzt, bzw. den schönen Hash zerxorst?
würde es maximal so machen:
Delphi-Quellcode:
function THashMap.GetShrunkHash(AKey: Pointer): cardinal;
begin
Result := CalculateHash(AKey) and FMask;
end;