private void WriteBlobHeap(BlobBuilder builder) { var writer = new BlobWriter(builder.ReserveBytes(_blobHeapSize)); // Perf consideration: With large heap the following loop may cause a lot of cache misses // since the order of entries in _blobs dictionary depends on the hash of the array values, // which is not correlated to the heap index. If we observe such issue we should order // the entries by heap position before running this loop. foreach (var entry in _blobs) { int heapOffset = MetadataTokens.GetHeapOffset(entry.Value); var blob = entry.Key; writer.Offset = heapOffset; writer.WriteCompressedInteger(blob.Length); writer.WriteBytes(blob); } }
// TODO: // WriteBytes(byte*) // WriteBytes(stream) // WriteBytes(byte[]) // WriteBytes(IA<byte>) // WriteReference private static void TestCompressedUnsignedInteger(byte[] expected, int value) { var writer = new BlobWriter(4); writer.WriteCompressedInteger((uint)value); AssertEx.Equal(expected, writer.ToArray()); var builder = new BlobBuilder(); builder.WriteCompressedInteger((uint)value); AssertEx.Equal(expected, builder.ToArray()); }
private static byte[] CompressUnsignedInteger(int value) { var writer = new BlobWriter(); writer.WriteCompressedInteger((uint)value); return writer.ToArray(); }