Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit UnitForm;
- interface
- uses
- Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
- Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, SynLZ, SynCommons;
- type
- TTest = class(TForm)
- Compress: TButton;
- Uncompress: TButton;
- chkSynLZ: TCheckBox;
- mmo1: TMemo;
- procedure CompressClick(Sender: TObject);
- procedure UncompressClick(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- Test: TTest;
- implementation
- {$R *.dfm}
- {$ifdef WIN64}
- uses Snappy;
- {$endif}
- const
- COUNT = 100000;
- FILENAME = 'partials'; //test' partials'; //'citylots'; //'THESAUR';
- FILEEXT = 'json'; //log' json'; // 'txt';
- procedure TTest.CompressClick(Sender: TObject); // I did a test with 1GB vhd file, works 100%
- var
- {$ifdef WIN64}
- env: psnappy_env;
- {$endif}
- StreamIN, StreamOUT: TMemoryStream;
- outlen: int64;
- timer: TPrecisionTimer;
- s: string;
- i: integer;
- synlz: boolean;
- begin
- synlz := chkSynLZ.Checked;
- if synlz then
- s := 'SynLZ'
- else
- s := 'Snappy';
- StreamIN := TMemoryStream.Create;
- StreamOUT := TMemoryStream.Create;
- StreamIN.LoadFromFile('z:\' + FILENAME + '.' + FILEEXT);
- StreamOUT.Size := StreamIN.Size * 2;
- try
- outlen := 0;
- timer.Start;
- for i := 1 to COUNT do
- if synlz then
- outlen := SynLZCompress1(StreamIn.Memory, StreamIN.Size, streamOut.Memory)
- {$ifdef WIN64}
- else begin
- New(env);
- snappy_init_env(env);
- snappy_compress(env, StreamIN.Memory, StreamIN.Size, StreamOUT.Memory, @outlen);
- snappy_free_env(env);
- Dispose(env);
- end;
- {$endif};
- mmo1.Lines.Add(format('%s compress in %s, size=%d, %s/s',
- [s, timer.Stop, outlen * COUNT, KB(timer.PerSec(outlen * COUNT))]));
- StreamOUT.Size := outlen;
- finally
- StreamIN.Free;
- StreamOUT.SaveToFile('z:\' + FILENAME + '.' + s);
- StreamOUT.Free;
- end;
- end;
- procedure TTest.UncompressClick(Sender: TObject);
- var
- {$ifdef WIN64}
- env: psnappy_env;
- {$endif}
- StreamIN, StreamOUT: TMemoryStream;
- outlen: int64;
- timer: TPrecisionTimer;
- s: string;
- i: integer;
- synlz: boolean;
- begin
- synlz := chkSynLZ.Checked;
- if synlz then
- s := 'SynLZ'
- else
- s := 'Snappy';
- StreamIN := TMemoryStream.Create;
- StreamOUT := TMemoryStream.Create;
- StreamIN.LoadFromFile('z:\' + FILENAME + '.' + s);
- if chkSynLZ.Checked then
- outlen := SynLZdecompressdestlen(StreamIN.Memory)
- {$ifdef WIN64}
- else
- snappy_uncompressed_length(StreamIN.Memory, StreamIN.Size, @outlen)
- {$endif};
- StreamOUT.Size := outlen;
- try
- timer.Start;
- for i := 1 to COUNT do
- if synlz then
- outlen := SynLZDecompress1(StreamIn.Memory, StreamIN.Size, streamOut.Memory)
- {$ifdef WIN64}
- else begin
- New(env);
- snappy_init_env(env);
- snappy_uncompress(StreamIN.Memory, StreamIN.Size, StreamOUT.Memory);
- snappy_free_env(env);
- Dispose(env);
- end;
- {$endif};
- mmo1.Lines.Add(format('%s uncompress in %s, size=%d, %s/s',
- [s, timer.Stop, outlen * COUNT, KB(timer.PerSec(outlen * COUNT))]));
- finally
- StreamIN.Free;
- StreamOUT.SaveToFile('z:\' + FILENAME + '-' + s + '.' + FILEEXT);
- StreamOUT.Free;
- end;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement