Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit rawUTF8ListUnit1;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, system.Generics.Collections;
- type
- TForm1 = class(TForm)
- mmo1: TMemo;
- procedure FormCreate(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- Form1: TForm1;
- implementation
- uses
- SynCommons;
- {$R *.dfm}
- procedure TForm1.FormCreate(Sender: TObject);
- var
- list: TRawUTF8ListHashed;
- locked: TRawUTF8ListHashedLocked;
- i, n: integer;
- timer: TPrecisionTimer;
- dict: TObjectDictionary<RawUTF8, TObject>;
- sd: TSynDictionary;
- s: RawUTF8;
- str: array of RawUTF8;
- v: TObject;
- begin
- n := 20000000;
- SetLength(str, n);
- for i := 0 to n - 1 do
- UInt32ToUTF8(i, str[i]);
- list := TRawUTF8ListHashed.Create;
- try
- timer.Start;
- for i := 0 to n - 1 do
- list.AddObject(str[i], pointer(i));
- s := FormatUTF8('% TRawUTF8ListHashed.AddObject in % (%/s)', [n, timer.Stop, timer.PerSec(n)]);
- timer.Start;
- list.IndexOf('1000');
- s := FormatUTF8('%'#13#10'first TRawUTF8ListHashed.IndexOf in %', [s, timer.Stop]);
- timer.Start;
- for i := 0 to n - 1 do
- list.IndexOf(str[i]);
- s := FormatUTF8('%'#13#10'% TRawUTF8ListHashed.IndexOf in % (%/s)', [s, n, timer.Stop, timer.PerSec(n)]);
- mmo1.Lines.Text := UTF8ToString(s);
- finally
- list.Free;
- end;
- locked := TRawUTF8ListHashedLocked.Create;
- try
- timer.Start;
- for i := 0 to n - 1 do begin
- locked.Safe.Lock;
- try
- locked.AddObject(str[i], pointer(i));
- finally
- locked.Safe.UnLock;
- end;
- end;
- s := FormatUTF8('% TRawUTF8ListHashedLocked.AddObject in % (%/s)', [n, timer.Stop, timer.PerSec(n)]);
- timer.Start;
- locked.LockedGetObjectByName('1000');
- s := FormatUTF8('%'#13#10'first TRawUTF8ListHashedLocked.LockedGetObjectByName in %', [s, timer.Stop]);
- timer.Start;
- for i := 0 to n - 1 do
- locked.LockedGetObjectByName(str[i]);
- s := FormatUTF8('%'#13#10'% TRawUTF8ListHashedLocked.LockedGetObjectByName in % (%/s)', [s, n, timer.Stop, timer.PerSec(n)]);
- mmo1.Lines.Text := mmo1.Lines.Text + #13#10#13#10 + UTF8ToString(s);
- finally
- locked.Free;
- end;
- sd := TSynDictionary.Create(TypeInfo(TRawUTF8DynArray), TypeInfo(TPointerDynArray));
- try
- sd.Capacity := n;
- timer.Start;
- for i := 0 to n - 1 do
- sd.Add(str[i], pointer(i));
- s := FormatUTF8('% TSynDictionary.Add in % (%/s)', [n, timer.Stop, timer.PerSec(n)]);
- timer.Start;
- sd.FindAndCopy(str[10], v);
- s := FormatUTF8('%'#13#10'first TSynDictionary.FindAndCopy in %', [s, timer.Stop]);
- timer.Start;
- for i := 0 to n - 1 do
- sd.FindAndCopy(str[i], v);
- s := FormatUTF8('%'#13#10'% TSynDictionary.FindAndCopy in % (%/s)', [s, n, timer.Stop, timer.PerSec(n)]);
- mmo1.Lines.Text := mmo1.Lines.Text + #13#10#13#10 + UTF8ToString(s);
- finally
- sd.Free;
- end;
- dict := TObjectDictionary<RawUTF8, TObject>.Create([]);
- try
- timer.Start;
- for i := 0 to n - 1 do
- dict.Add(str[i], pointer(i));
- s := FormatUTF8('% TObjectDictionary.Add in % (%/s)', [n, timer.Stop, timer.PerSec(n)]);
- timer.Start;
- dict.TryGetValue('1000', v);
- s := FormatUTF8('%'#13#10'first TObjectDictionary.IndexOf in %', [s, timer.Stop]);
- timer.Start;
- for i := 0 to n - 1 do
- dict.TryGetValue(str[i], v);
- s := FormatUTF8('%'#13#10'% TObjectDictionary.IndexOf in % (%/s)', [s, n, timer.Stop, timer.PerSec(n)]);
- mmo1.Lines.Text := mmo1.Lines.Text + #13#10#13#10 + UTF8ToString(s);
- finally
- dict.Free;
- end;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement