Advertisement
Guest User

Untitled

a guest
Aug 12th, 2016
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 4.11 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 = 1;
  38.   //FILE_TEST = 'ecommerce.json';
  39.   //FILE_TEST = 'partials.json';
  40.   //FILE_TEST = 'transactions.json';
  41.   FILE_TEST = 'DRAGONFLY1-bhshdd001ServAppStarterApi.log';
  42.  
  43. procedure TTest.CompressClick(Sender: TObject); // I did a test with 1GB vhd file, works md5 100%
  44. var
  45.   env: psnappy_env;
  46.   StreamIN, StreamOUT: TMemoryStream;
  47.   inlen,outlen: NativeUInt;
  48.   timer: TPrecisionTimer;
  49.   s: string;
  50.   i: integer;
  51.   SynLZ: boolean;
  52. begin
  53.   SynLZ := chkSynLZ.Checked;
  54.   if SynLZ then
  55.     s := 'SynLZ'
  56.   else
  57.     s := 'Snappy';
  58.   StreamIN := TMemoryStream.Create;
  59.   StreamOUT := TMemoryStream.Create;
  60.   StreamIN.LoadFromFile(FILE_TEST);
  61.   inlen := StreamIN.Size;
  62.   if Memo1.Lines.Text = '' then
  63.     Memo1.Lines.Text := format({$IFDEF WIN64}'Win64'{$else}'Win32'{$endif}+
  64.       ' Processing %s = %s for %d times',[FILE_TEST,KB(inlen),COUNT]);
  65.   StreamOUT.Size := inlen;
  66.   try
  67.     outlen := 0;
  68.     sleep(100);
  69.     timer.Start;
  70.     for i := 1 to COUNT do
  71.       if SynLZ then
  72.         outlen := SynLZCompress1(StreamIN.Memory, StreamIN.Size, StreamOUT.Memory)
  73.       else begin
  74.         New(env);
  75.       {$IFDEF WIN64}
  76.         snappy_init_env(env);
  77.         snappy_compress(env, StreamIN.Memory, StreamIN.Size, StreamOUT.Memory, @outlen);
  78.         snappy_free_env(env);
  79.       {$ENDIF}
  80.       {$IFDEF WIN32}
  81.         _snappy_init_env(env);
  82.         _snappy_compress(env, StreamIN.Memory, StreamIN.Size, StreamOUT.Memory, @outlen);
  83.         _snappy_free_env(env);
  84.       {$ENDIF}
  85.         Dispose(env);
  86.       end;
  87.   Memo1.Lines.Add(format(' %s compress in %s, ratio=%d%%, %s/s',
  88.      [s, timer.Stop, 100-((100*outlen)div inlen), KB(timer.PerSec(inlen*COUNT))]));
  89.   StreamOut.Size := outlen;
  90.   StreamOUT.SaveToFile(FILE_TEST + '.' + s);
  91. finally
  92.   StreamIN.Free;
  93.   StreamOUT.Free;
  94. end;
  95. end;
  96.  
  97. procedure TTest.UncompressClick(Sender: TObject);
  98. var
  99.   env: psnappy_env;
  100.   StreamIN, StreamOUT: TMemoryStream;
  101.   outlen: NativeUInt;
  102.   timer: TPrecisionTimer;
  103.   s: string;
  104.   i: integer;
  105.   SynLZ: boolean;
  106. begin
  107.   SynLZ := chkSynLZ.Checked;
  108.   if SynLZ then
  109.     s := 'SynLZ'
  110.   else
  111.     s := 'Snappy';
  112.   StreamIN := TMemoryStream.Create;
  113.   StreamOUT := TMemoryStream.Create;
  114.   StreamIN.LoadFromFile(FILE_TEST + '.' + s);
  115.   if chkSynLZ.Checked then
  116.     outlen := SynLZdecompressdestlen(StreamIN.Memory)
  117.   else
  118. {$IFDEF WIN64}
  119.     snappy_uncompressed_length(StreamIN.Memory, StreamIN.Size, @outlen)
  120. {$ENDIF}
  121. {$IFDEF WIN32}
  122.     _snappy_uncompressed_length(StreamIN.Memory, StreamIN.Size, @outlen)
  123. {$ENDIF};
  124.   StreamOUT.Size := outlen;
  125.   sleep(100);
  126.   try
  127.     timer.Start;
  128.     for i := 1 to COUNT do
  129.       if SynLZ then
  130.         outlen := SynLZDecompress1(StreamIN.Memory, StreamIN.Size, StreamOUT.Memory)
  131.       else begin
  132.         New(env);
  133.         {$IFDEF WIN64}
  134.         snappy_init_env(env);
  135.         snappy_uncompress(StreamIN.Memory, StreamIN.Size, StreamOUT.Memory);
  136.         snappy_free_env(env);
  137.         {$ENDIF}
  138.         {$IFDEF WIN32}
  139.         _snappy_init_env(env);
  140.         _snappy_uncompress(StreamIN.Memory, StreamIN.Size, StreamOUT.Memory);
  141.         _snappy_free_env(env);
  142.         {$ENDIF}
  143.         Dispose(env);
  144.       end;
  145.     Memo1.Lines.Add(format(' %s uncompress in %s, %s/s', [s, timer.Stop, KB(timer.PerSec(outlen * COUNT))]));
  146.   finally
  147.     StreamIN.Free;
  148.     StreamOUT.SaveToFile(FILE_TEST + '2');
  149.     StreamOUT.Free;
  150.   end;
  151. end;
  152.  
  153. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement