vložil Radek Červinka
5. listopadu 2010 23:48
V článku Základy JSON v Delphi kolega <z> nastínil porovnání rychlosti JSON, INI a dalších. Jelikož bylo několik dotazů pro upřesnění, zde je výsledek, který mi <z> zaslal a navíc testovací program. Je samozřejmé, že je zde prostor pro další optimalizaci, přesto to lze chápat jako ukázku a přehled možností.
Aktualizováno po druhé
Testovací projekt ke stažení nová verze
Nový test obsahuje jak zápis, tak čtení. To se samozřejmě projevilo ve výsledcích.
Testy jasně prokázaly, že JSON je znatelně nejrychlejší, ještě více se to projeví při ukládání většího množství dat.
S JSON lze uložit 100 000 položek a pořád to bude 2x rychlejší, než uložení 2 000 položek pomocí TIniFile)
Nový test a výsledky
- vytvoření objektu
- zapsání 2000 položek typu string
- zapsání 2000 položek typu integer
- uložení do souboru
- uvolnění objektu
- vytvoření a načtení objektu ze souboru
- 500x změna položek typu string na pozici 700
- znovu uložení do souboru a uvolnění objektu
metoda | doba | velikost | vytížení procesoru |
json-SuperObject | 62ms | 65776b | 0% |
json-SuperObject | 63ms | 81778b | 0% (formátovany výstup) |
lkJSON | 78ms | 65778b | 0% |
lkJSON | 655ms | 81780b | 0% (formátovany výstup) |
NativeXML | 8580ms | 83608b | 0% |
MSXML | 36s | 95634b | 0% |
TIniFile | 4384ms | 57784b | 100% |
TMemINI | 12012ms | 57786b | 100% |
TStringList | 9017ms | 57775b | 35% |
THashedStringList | 11950ms | 57775b | 100% |
Poznámka Radek Červinka: Pro mne je nejzajímavější rozdíl mezi TStringList a THashedStringList, kdy jsem očekával, že THashedStringList bude rychlejší. Po pohledu do zdrojáků jsem ale pochopil, že v tomto případě to není pravda, jelikož se jedná o aktualizace dat a THashedStringList po každém přidání zneplatňuje hash tabulku a v případě vyhledávání v tomto okamžiku je nutné vytvořit hashe znovu - což se stane.
Aktualizace 2: THashedStringList by se neměl používat - jedná se jen o dinosaura. Pokud máte Delphi 2009+ použijte TDictionary protože je nejlepší.
Pokud by se ale jednalo o naplnění a pak jen prohledávání, tak by THashedStringList byl sice slušné řešení, ale na TDictionary se dívá i tak z velké dálky.