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 = 50;
- 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';
- {$ifdef WIN64}
- New(env);
- snappy_init_env(env);
- {$endif}
- StreamIN := TMemoryStream.Create;
- StreamOUT := TMemoryStream.Create;
- StreamIN.LoadFromFile('z:\THESAUR.TXT');
- 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
- snappy_compress(env, StreamIN.Memory, StreamIN.Size, StreamOUT.Memory, @outlen)
- {$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:\THESAUR.' + s);
- StreamOUT.Free;
- {$ifdef WIN64}
- snappy_free_env(env);
- Dispose(env);
- {$endif}
- 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';
- {$ifdef WIN64}
- New(env);
- snappy_init_env(env);
- {$endif}
- StreamIN := TMemoryStream.Create;
- StreamOUT := TMemoryStream.Create;
- StreamIN.LoadFromFile('z:\THESAUR.' + 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
- snappy_uncompress(StreamIN.Memory, StreamIN.Size, StreamOUT.Memory)
- {$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:\THESAUR-' + s + '.TXT');
- StreamOUT.Free;
- {$ifdef WIN64}
- snappy_free_env(env);
- Dispose(env);
- {$endif}
- end;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement