Advertisement
Guest User

Untitled

a guest
Apr 18th, 2017
245
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 3.67 KB | None | 0 0
  1. unit rawUTF8ListUnit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls, system.Generics.Collections;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     mmo1: TMemo;
  12.     procedure FormCreate(Sender: TObject);
  13.   private
  14.     { Private declarations }
  15.   public
  16.     { Public declarations }
  17.   end;
  18.  
  19. var
  20.   Form1: TForm1;
  21.  
  22. implementation
  23.  
  24. uses
  25.   SynCommons;
  26.  
  27. {$R *.dfm}
  28.  
  29. procedure TForm1.FormCreate(Sender: TObject);
  30. var
  31.   list: TRawUTF8ListHashed;
  32.   locked: TRawUTF8ListHashedLocked;
  33.   i, n: integer;
  34.   timer: TPrecisionTimer;
  35.   dict: TObjectDictionary<RawUTF8, TObject>;
  36.   sd: TSynDictionary;
  37.   s: RawUTF8;
  38.   str: array of RawUTF8;
  39.   v: TObject;
  40. begin
  41.   n := 20000000;
  42.   SetLength(str, n);
  43.   for i := 0 to n - 1 do
  44.     UInt32ToUTF8(i, str[i]);
  45.  
  46.   list := TRawUTF8ListHashed.Create;
  47.   try
  48.     timer.Start;
  49.     for i := 0 to n - 1 do
  50.       list.AddObject(str[i], pointer(i));
  51.     s := FormatUTF8('% TRawUTF8ListHashed.AddObject in % (%/s)', [n, timer.Stop, timer.PerSec(n)]);
  52.     timer.Start;
  53.     list.IndexOf('1000');
  54.     s := FormatUTF8('%'#13#10'first TRawUTF8ListHashed.IndexOf in %', [s, timer.Stop]);
  55.     timer.Start;
  56.     for i := 0 to n - 1 do
  57.       list.IndexOf(str[i]);
  58.     s := FormatUTF8('%'#13#10'% TRawUTF8ListHashed.IndexOf in % (%/s)', [s, n, timer.Stop, timer.PerSec(n)]);
  59.     mmo1.Lines.Text := UTF8ToString(s);
  60.   finally
  61.     list.Free;
  62.   end;
  63.  
  64.   locked := TRawUTF8ListHashedLocked.Create;
  65.   try
  66.     timer.Start;
  67.     for i := 0 to n - 1 do begin
  68.       locked.Safe.Lock;
  69.       try
  70.         locked.AddObject(str[i], pointer(i));
  71.       finally
  72.         locked.Safe.UnLock;
  73.       end;
  74.     end;
  75.     s := FormatUTF8('% TRawUTF8ListHashedLocked.AddObject in % (%/s)', [n, timer.Stop, timer.PerSec(n)]);
  76.     timer.Start;
  77.     locked.LockedGetObjectByName('1000');
  78.     s := FormatUTF8('%'#13#10'first TRawUTF8ListHashedLocked.LockedGetObjectByName in %', [s, timer.Stop]);
  79.     timer.Start;
  80.     for i := 0 to n - 1 do
  81.       locked.LockedGetObjectByName(str[i]);
  82.     s := FormatUTF8('%'#13#10'% TRawUTF8ListHashedLocked.LockedGetObjectByName in % (%/s)', [s, n, timer.Stop, timer.PerSec(n)]);
  83.     mmo1.Lines.Text := mmo1.Lines.Text + #13#10#13#10 + UTF8ToString(s);
  84.   finally
  85.     locked.Free;
  86.   end;
  87.  
  88.   sd := TSynDictionary.Create(TypeInfo(TRawUTF8DynArray), TypeInfo(TPointerDynArray));
  89.   try
  90.     sd.Capacity := n;
  91.     timer.Start;
  92.     for i := 0 to n - 1 do
  93.       sd.Add(str[i], pointer(i));
  94.     s := FormatUTF8('% TSynDictionary.Add in % (%/s)', [n, timer.Stop, timer.PerSec(n)]);
  95.     timer.Start;
  96.     sd.FindAndCopy(str[10], v);
  97.     s := FormatUTF8('%'#13#10'first TSynDictionary.FindAndCopy in %', [s, timer.Stop]);
  98.     timer.Start;
  99.     for i := 0 to n - 1 do
  100.       sd.FindAndCopy(str[i], v);
  101.     s := FormatUTF8('%'#13#10'% TSynDictionary.FindAndCopy in % (%/s)', [s, n, timer.Stop, timer.PerSec(n)]);
  102.     mmo1.Lines.Text := mmo1.Lines.Text + #13#10#13#10 + UTF8ToString(s);
  103.   finally
  104.     sd.Free;
  105.   end;
  106.  
  107.   dict := TObjectDictionary<RawUTF8, TObject>.Create([]);
  108.   try
  109.     timer.Start;
  110.     for i := 0 to n - 1 do
  111.       dict.Add(str[i], pointer(i));
  112.     s := FormatUTF8('% TObjectDictionary.Add in % (%/s)', [n, timer.Stop, timer.PerSec(n)]);
  113.     timer.Start;
  114.     dict.TryGetValue('1000', v);
  115.     s := FormatUTF8('%'#13#10'first TObjectDictionary.IndexOf in %', [s, timer.Stop]);
  116.     timer.Start;
  117.     for i := 0 to n - 1 do
  118.       dict.TryGetValue(str[i], v);
  119.     s := FormatUTF8('%'#13#10'% TObjectDictionary.IndexOf in % (%/s)', [s, n, timer.Stop, timer.PerSec(n)]);
  120.     mmo1.Lines.Text := mmo1.Lines.Text + #13#10#13#10 + UTF8ToString(s);
  121.   finally
  122.     dict.Free;
  123.   end;
  124. end;
  125.  
  126. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement