private MemoryBlock GetVirtualHandleMemoryBlock(StringHandle handle) { Debug.Assert(handle.IsVirtual); var heap = VirtualHeap.GetOrCreateVirtualHeap(ref _lazyVirtualHeap); lock (heap) { if (!heap.TryGetMemoryBlock(handle.RawValue, out var block)) { byte[] bytes; switch (handle.StringKind) { case StringKind.Virtual: bytes = Encoding.UTF8.GetBytes(GetVirtualString(handle.GetVirtualIndex())); break; case StringKind.WinRTPrefixed: bytes = GetNonVirtualStringBytes(handle, MetadataReader.WinRTPrefix); break; default: throw ExceptionUtilities.UnexpectedValue(handle.StringKind); } block = heap.AddBlob(handle.RawValue, bytes); } return(block); } }
private MemoryBlock GetVirtualHandleMemoryBlock(BlobHandle handle) { var heap = VirtualHeap.GetOrCreateVirtualHeap(ref _lazyVirtualHeap); lock (heap) { if (!heap.TryGetMemoryBlock(handle.RawValue, out var block)) { block = heap.AddBlob(handle.RawValue, GetVirtualBlobBytes(handle, unique: false)); } return(block); } }