Advertisement
Guest User

Untitled

a guest
Aug 5th, 2016
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 3.18 KB | None | 0 0
  1. unit UnitForm;
  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, SynLZ, SynCommons;
  8.  
  9. type
  10.   TTest = class(TForm)
  11.     Compress: TButton;
  12.     Uncompress: TButton;
  13.     chkSynLZ: TCheckBox;
  14.     mmo1: TMemo;
  15.     procedure CompressClick(Sender: TObject);
  16.     procedure UncompressClick(Sender: TObject);
  17.   private
  18.     { Private declarations }
  19.   public
  20.     { Public declarations }
  21.   end;
  22.  
  23. var
  24.   Test: TTest;
  25.  
  26. implementation
  27.  
  28. {$R *.dfm}
  29.  
  30. {$ifdef WIN64}
  31. uses Snappy;
  32. {$endif}
  33.  
  34. const
  35.   COUNT = 50;
  36.  
  37. procedure TTest.CompressClick(Sender: TObject); // I did a test with 1GB vhd file, works 100%
  38. var
  39. {$ifdef WIN64}
  40.   env: psnappy_env;
  41. {$endif}
  42.   StreamIN, StreamOUT: TMemoryStream;
  43.   outlen: int64;
  44.   timer: TPrecisionTimer;
  45.   s: string;
  46.   i: integer;
  47.   synlz: boolean;
  48. begin
  49.   synlz := chkSynLZ.Checked;
  50.   if synlz then
  51.     s := 'SynLZ'
  52.   else
  53.     s := 'Snappy';
  54. {$ifdef WIN64}
  55.   New(env);
  56.   snappy_init_env(env);
  57. {$endif}
  58.   StreamIN := TMemoryStream.Create;
  59.   StreamOUT := TMemoryStream.Create;
  60.   StreamIN.LoadFromFile('z:\THESAUR.TXT');
  61.   StreamOUT.Size := StreamIN.Size * 2;
  62.   try
  63.     outlen := 0;
  64.     Timer.Start;
  65.     for i := 1 to COUNT do
  66.       if synlz then
  67.         outlen := SynLZCompress1(StreamIn.Memory, StreamIN.Size, streamOut.Memory)
  68. {$ifdef WIN64}
  69.       else
  70.         snappy_compress(env, StreamIN.Memory, StreamIN.Size, StreamOUT.Memory, @outlen)
  71. {$endif};
  72.     mmo1.Lines.Add(format('%s compress in %s, size=%d, %s/s',
  73.       [s, Timer.Stop, outlen * COUNT, KB(timer.PerSec(outlen * COUNT))]));
  74.     StreamOUT.Size := outlen;
  75.   finally
  76.     StreamIN.Free;
  77.     StreamOUT.SaveToFile('z:\THESAUR.' + s);
  78.     StreamOUT.Free;
  79. {$ifdef WIN64}
  80.     snappy_free_env(env);
  81.     Dispose(env);
  82. {$endif}
  83.   end;
  84. end;
  85.  
  86. procedure TTest.UncompressClick(Sender: TObject);
  87. var
  88. {$ifdef WIN64}
  89.   env: psnappy_env;
  90. {$endif}
  91.   StreamIN, StreamOUT: TMemoryStream;
  92.   outlen: int64;
  93.   Timer: TPrecisionTimer;
  94.   s: string;
  95.   i: integer;
  96.   synlz: boolean;
  97. begin
  98.   synlz := chkSynLZ.Checked;
  99.   if synlz then
  100.     s := 'SynLZ'
  101.   else
  102.     s := 'Snappy';
  103. {$ifdef WIN64}
  104.   New(env);
  105.   snappy_init_env(env);
  106. {$endif}
  107.   StreamIN := TMemoryStream.Create;
  108.   StreamOUT := TMemoryStream.Create;
  109.   StreamIN.LoadFromFile('z:\THESAUR.' + s);
  110.   if chkSynLZ.Checked then
  111.     outlen := SynLZdecompressdestlen(StreamIN.Memory)
  112. {$ifdef WIN64}
  113.   else
  114.     snappy_uncompressed_length(StreamIN.Memory, StreamIN.Size, @outlen)
  115. {$endif};
  116.   StreamOUT.Size := outlen;
  117.   try
  118.     timer.Start;
  119.     for i := 1 to COUNT do
  120.       if synlz then
  121.         outlen := SynLZDecompress1(StreamIn.Memory, StreamIN.Size, streamOut.Memory)
  122. {$ifdef WIN64}
  123.       else
  124.         snappy_uncompress(StreamIN.Memory, StreamIN.Size, StreamOUT.Memory)
  125. {$endif};
  126.     mmo1.Lines.Add(format('%s uncompress in %s, size=%d, %s/s',
  127.       [s, Timer.Stop, outlen * COUNT, KB(timer.PerSec(outlen * COUNT))]));
  128.   finally
  129.     StreamIN.Free;
  130.     StreamOUT.SaveToFile('z:\THESAUR-' + s + '.TXT');
  131.     StreamOUT.Free;
  132. {$ifdef WIN64}
  133.     snappy_free_env(env);
  134.     Dispose(env);
  135. {$endif}
  136.   end;
  137. end;
  138.  
  139. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement