Advertisement
Guest User

Untitled

a guest
Aug 11th, 2016
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 3.87 KB | None | 0 0
  1. unit FormTest;
  2.  
  3. interface
  4.  
  5. uses
  6.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  7.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
  8.  
  9.   //the following units are not used in Snappy, them are provided for a base benchmark;
  10.   //you can delete them into your Snappy code
  11.   SynLZ, SynCommons; //from Synopse mORMot Framework
  12.  
  13. type
  14.   TTest = class(TForm)
  15.     Compress: TButton;
  16.     Uncompress: TButton;
  17.     chkSynLZ: TCheckBox;
  18.     Memo1: TMemo;
  19.     procedure CompressClick(Sender: TObject);
  20.     procedure UncompressClick(Sender: TObject);
  21.   private
  22.     { Private declarations }
  23.   public
  24.     { Public declarations }
  25.   end;
  26.  
  27. var
  28.   Test: TTest;
  29.  
  30. implementation
  31.  
  32. {$R *.dfm}
  33.  
  34. uses Snappy;
  35.  
  36. const
  37.   COUNT = 100000;
  38.   FILE_TEST = 'partials.json';//'transactions.json';//'DRAGONFLY1-bhshdd001ServAppStarterApi.log';
  39.  
  40. procedure TTest.CompressClick(Sender: TObject); // I did a test with 1GB vhd file, works md5 100%
  41. var
  42.   env: psnappy_env;
  43.   StreamIN, StreamOUT: TMemoryStream;
  44.   inlen,outlen: NativeUInt;
  45.   timer: TPrecisionTimer;
  46.   s: string;
  47.   i: integer;
  48.   SynLZ: boolean;
  49. begin
  50.   SynLZ := chkSynLZ.Checked;
  51.   if SynLZ then
  52.     s := 'SynLZ'
  53.   else
  54.     s := 'Snappy';
  55.   StreamIN := TMemoryStream.Create;
  56.   StreamOUT := TMemoryStream.Create;
  57.   StreamIN.LoadFromFile(FILE_TEST);
  58.   inlen := StreamIN.Size;
  59.   StreamOUT.Size := inlen;
  60.   try
  61.     outlen := 0;
  62.     sleep(100);
  63.     timer.Start;
  64.     for i := 1 to COUNT do
  65.       if SynLZ then
  66.         outlen := SynLZCompress1(StreamIN.Memory, StreamIN.Size, StreamOUT.Memory)
  67.       else begin
  68.         New(env);
  69.       {$IFDEF WIN64}
  70.         snappy_init_env(env);
  71.         snappy_compress(env, StreamIN.Memory, StreamIN.Size, StreamOUT.Memory, @outlen);
  72.         snappy_free_env(env);
  73.       {$ENDIF}
  74.       {$IFDEF WIN32}
  75.         _snappy_init_env(env);
  76.         _snappy_compress(env, StreamIN.Memory, StreamIN.Size, StreamOUT.Memory, @outlen);
  77.         _snappy_free_env(env);
  78.       {$ENDIF}
  79.         Dispose(env);
  80.       end;
  81.   Memo1.Lines.Add(format('%s compress in %s, ratio=%d%%, %s/s',
  82.      [s, timer.Stop, 100-((100*outlen)div inlen), KB(timer.PerSec(inlen*COUNT))]));
  83.   StreamOut.Size := outlen;
  84.   StreamOUT.SaveToFile(FILE_TEST + '.' + s);
  85. finally
  86.   StreamIN.Free;
  87.   StreamOUT.Free;
  88. end;
  89. end;
  90.  
  91. procedure TTest.UncompressClick(Sender: TObject);
  92. var
  93.   env: psnappy_env;
  94.   StreamIN, StreamOUT: TMemoryStream;
  95.   outlen: NativeUInt;
  96.   timer: TPrecisionTimer;
  97.   s: string;
  98.   i: integer;
  99.   SynLZ: boolean;
  100. begin
  101.   SynLZ := chkSynLZ.Checked;
  102.   if SynLZ then
  103.     s := 'SynLZ'
  104.   else
  105.     s := 'Snappy';
  106.   StreamIN := TMemoryStream.Create;
  107.   StreamOUT := TMemoryStream.Create;
  108.   StreamIN.LoadFromFile(FILE_TEST + '.' + s);
  109.   if chkSynLZ.Checked then
  110.     outlen := SynLZdecompressdestlen(StreamIN.Memory)
  111.   else
  112. {$IFDEF WIN64}
  113.     snappy_uncompressed_length(StreamIN.Memory, StreamIN.Size, @outlen)
  114. {$ENDIF}
  115. {$IFDEF WIN32}
  116.     _snappy_uncompressed_length(StreamIN.Memory, StreamIN.Size, @outlen)
  117. {$ENDIF};
  118.   StreamOUT.Size := outlen;
  119.   sleep(100);
  120.   try
  121.     timer.Start;
  122.     for i := 1 to COUNT do
  123.       if SynLZ then
  124.         outlen := SynLZDecompress1(StreamIN.Memory, StreamIN.Size, StreamOUT.Memory)
  125.       else begin
  126.         New(env);
  127.         {$IFDEF WIN64}
  128.         snappy_init_env(env);
  129.         snappy_uncompress(StreamIN.Memory, StreamIN.Size, StreamOUT.Memory);
  130.         snappy_free_env(env);
  131.         {$ENDIF}
  132.         {$IFDEF WIN32}
  133.         _snappy_init_env(env);
  134.         _snappy_uncompress(StreamIN.Memory, StreamIN.Size, StreamOUT.Memory);
  135.         _snappy_free_env(env);
  136.         {$ENDIF}
  137.         Dispose(env);
  138.       end;
  139.     Memo1.Lines.Add(format('%s uncompress in %s, %s/s', [s, timer.Stop, KB(timer.PerSec(outlen * COUNT))]));
  140.   finally
  141.     StreamIN.Free;
  142.     StreamOUT.SaveToFile(FILE_TEST + '2');
  143.     StreamOUT.Free;
  144.   end;
  145. end;
  146.  
  147. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement