internal static ImmutableArray <byte> CreateBlob(ArraySegment <byte> bytes) { RoslynDebug.Assert(bytes.Array != null); if (bytes.Count < CompressionThreshold) { using (var builder = Cci.PooledBlobBuilder.GetInstance()) { builder.WriteInt32(0); builder.WriteBytes(bytes.Array, bytes.Offset, bytes.Count); return(builder.ToImmutableArray()); } } else { using (var builder = BlobBuildingStream.GetInstance()) { builder.WriteInt32(bytes.Count); using ( var deflater = new CountingDeflateStream( builder, CompressionLevel.Optimal, leaveOpen: true ) ) { deflater.Write(bytes.Array, bytes.Offset, bytes.Count); } return(builder.ToImmutableArray()); } } }
internal static ImmutableArray <byte> CreateBlob(ArraySegment <byte> bytes) { if (bytes.Count < 200) { BlobBuilder pooledBlobBuilder = new BlobBuilder(); pooledBlobBuilder.WriteInt32(0); pooledBlobBuilder.WriteBytes(bytes.Array, bytes.Offset, bytes.Count); return(pooledBlobBuilder.ToImmutableArray()); } using (BlobBuildingStream builder = BlobBuildingStream.GetInstance()) { builder.WriteInt32(bytes.Count); using (CountingDeflateStream deflater = new CountingDeflateStream(builder, CompressionLevel.Optimal, leaveOpen: true)) { deflater.Write(bytes.Array, bytes.Offset, bytes.Count); } return(builder.ToImmutableArray()); } }
internal static ImmutableArray<byte> CreateBlob(ArraySegment<byte> bytes) { Debug.Assert(bytes.Array != null); if (bytes.Count < CompressionThreshold) { using (var builder = Cci.PooledBlobBuilder.GetInstance()) { builder.WriteInt32(0); builder.WriteBytes(bytes.Array, bytes.Offset, bytes.Count); return builder.ToImmutableArray(); } } else { using (var builder = BlobBuildingStream.GetInstance()) { builder.WriteInt32(bytes.Count); using (var deflater = new CountingDeflateStream(builder, CompressionLevel.Optimal, leaveOpen: true)) { deflater.Write(bytes.Array, bytes.Offset, bytes.Count); } return builder.ToImmutableArray(); } } }