public static void Serialize(object o, BufferPollManager poolmanager, ref int bufferindex, ref long size, ref byte[] serbyte, bool compress = true) { MemoryStreamWriter writer = new MemoryStreamWriter(poolmanager); Serialize(o, writer); bufferindex = writer.Bufferindex; size = writer.GetDataLen(); if (bufferindex == -1) { serbyte = writer.GetBytes(); if (compress && size - 8 > minGZIPCompressLenth) { var compressBytes = GZip.Compress(serbyte.Skip(8).Take((int)size - 8).ToArray()); size = 8 + compressBytes.Length; serbyte = new byte[size]; for (int i = 0; i < compressBytes.Length; i++) { serbyte[i + 8] = compressBytes[i]; } } } else { if (compress && size - 8 > minGZIPCompressLenth) { var offset = poolmanager.GetOffset(bufferindex); var compressBytes = GZip.Compress(poolmanager.Buffer.Skip(offset + 8).Take((int)size - 8).ToArray()); size = 8 + compressBytes.Length; for (int i = 0; i < compressBytes.Length; i++) { poolmanager.Buffer[offset + 8 + i] = compressBytes[i]; } } } }