Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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);
            }
        }