TDictionary

vložil Radek Červinka 8. listopadu 2010 09:48

V minulém článku o porovnání rychlosti JSON s jinými způsoby se diskuze trošku rozjela, tak přicházím i se svým řešením pro rychlou implementaci za pomoci TDictionary, které je velmi rychlé a umožňuje použití generik.

TDictionary neumožňuje ukládání a načítání, takže jsem si musel vypomoci sám, abych dodržel podmínky z minulého článku (procedury mLoad a mSave).

Časová náročnost je velmi malá (největší čas trvá mé ne moc optimalizované načítání a ukládání), samotná práce s položkami je velmi efektivní (2000 položek, 500 aktualizací).

třída: celkova doba : doba prace bez nahravani/ukladani

HashedStringList: 5969 : 5953
TDictionary: 16 : 0
MS XML: 29922 : 29781
TIniFile: 2469 : 2469
TMemIni: 5953 : 5937
StringList: 3016 : 3016

uses
  Generics.Collections;


 procedure TForm2.btnHashList2Click(Sender: TObject);
 var
   i:Integer;
   list: TDictionary<string, string>;

   procedure mSave;
   var
     p: TPair<string, string>;
     t: TextFile;
   begin
     assignfile(t, Edit3.Text+'testhash.dat');
     rewrite(t);
     for p in list do
       writeln(t, p.Key + '='+p.Value);
     closefile(t);
   end;
   procedure mLoad;
   var
     t: TextFile;
     s, s1: string;
     i:Integer;
   begin
     assignfile(t, Edit3.Text+'testhash.dat');
     reset(t);
     while not Eof(t) do
     begin
       readln(t, s);
       i := Pos('=', s);
       s1 := Copy(s, 1, i - 1);
       list.Add(Copy(s, 1, i - 1), Copy(s, i+1, Length(s)));
     end;
     closefile(t);
   end;

 begin
   ZacitCas(z, k);

   list:=TDictionary<string, string>.Create;

   ZacitCas(z1, k1);
   for i := 0 to StrToIntDef(Edit1.Text,1000) - 1 do
     begin
       list.AddOrSetValue(IntToStr(i)+'S', 'asdfghjklp');
       list.AddOrSetValue(IntToStr(i)+'I', IntToStr(9999));
     end;
   KonecCas(z1, k1);
   mSave;

   list.Free;

   list:=TDictionary<string, string>.Create;
   mLoad;

   ZacitCas(z1, k1, False);
   for i := 0 to StrToIntDef(Edit2.Text,200) - 1 do
     list.AddOrSetValue('700S', 'zmena');
   KonecCas(z1, k1);
   mSave;

   list.Free;

   KonecCas(z, k);

   Memo1.Lines.Add('HashedStringList: '+CelkovyCas(k)+' : '+CelkovyCas(k1));
 end;

Závěr: pokud potřebujete strukturovaný zápis dat, zvažte použití JSON, v ostatních případech zvažte TDictionary nebo i jiné třídy z Generics.Collections. Delphi 2009+.

Tagy:

Praxe

Komentáře

8.11.2010 10:45:57 #

pingback

Pingback from topsy.com

Twitter Trackbacks for
        
        Delphi.cz | TDictionary
        [delphi.cz]
        on Topsy.com

topsy.com

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

Pokud chcete podpořit tento server libovolnou částkou, můžete použít PayPal. Moc děkuji.

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS