I wanted to see how long it takes for large data to be compressed in memory (thought it would be efficient). So I tried to use ICSharpCode SharpZipLib and also compared the efficiency with GZipStream/DeflateStream. I used my TimeAndExecute() method I posted earlier and used a 80 MB random data.
My observations are:
1. There is no CompressionLevel setting to be used with GZipStream/DeflateStream.
2. CompressionLevel when set in SharpZipLib has good impact. BEST_SPEED was way 2 seconds faster than the other two standard BCL classes.
3. DeflateStream is faster than GZipStream.
Code used:
1: public class ZipHelper
2: {3: private static readonly int BUFF_SIZE = 1024 * 1024 * 1;
4: 5: public static byte[] Compress(byte[] data)
6: {7: var memory = new MemoryStream();
8: using (DeflaterOutputStream stream = new DeflaterOutputStream(memory,
9: new Deflater(Deflater.BEST_COMPRESSION), ZipHelper.BUFF_SIZE))
10: { 11: stream.Write(data, 0, data.Length); 12: }13: return memory.ToArray();
14: } 15: 16: public static byte[] StdCompress(byte[] data)
17: {18: var memory = new MemoryStream();
19: using (var strm = new GZipStream(memory, CompressionMode.Compress))
20: { 21: strm.Write(data, 0, data.Length); 22: }23: return memory.ToArray();
24: } 25: 26: public static byte[] DeflateCompress(byte[] data)
27: {28: var memory = new MemoryStream();
29: using (var strm = new DeflateStream(memory, CompressionMode.Compress))
30: { 31: strm.Write(data, 0, data.Length); 32: }33: return memory.ToArray();
34: } 35: 36: public static byte[] GetBytes(object o)
37: {38: using (MemoryStream mem = new MemoryStream(ZipHelper.BUFF_SIZE))
39: {40: var bf = new BinaryFormatter();
41: bf.Serialize(mem, o);42: return mem.ToArray();
43: } 44: } 45: 46: public static byte[] DeflateCompress(object obj)
47: {48: return DeflateCompress(GetBytes(obj));
49: }50: public static byte[] StdCompress(object obj)
51: {52: return StdCompress(GetBytes(obj));
53: } 54: 55: public static byte[] Compress(object o)
56: {57: return Compress(GetBytes(o));
58: } 59: 60: }Using SharpZipLib CompressionMode.BEST_COMPRESSION
Using SharpZipLib CompressionMode.BEST_SPEED
So clearly, it is not a good idea to use compressed data that is frequently accessed in memory. It takes more time to compress as well as decompress. I did not bother with de-compression though! Extensions later.
No comments:
Post a Comment