Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / clr / src / BCL / System / IO / PinnedBufferMemoryStream.cs / 1 / PinnedBufferMemoryStream.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** Class: PinnedBufferMemoryStream ** ** ** Purpose: Pins a byte[], exposing it as an unmanaged memory ** stream. Used in ResourceReader for corner cases. ** ** ===========================================================*/ using System; using System.Runtime.InteropServices; namespace System.IO { internal sealed unsafe class PinnedBufferMemoryStream : UnmanagedMemoryStream { private byte[] _array; private GCHandle _pinningHandle; internal PinnedBufferMemoryStream(byte[] array) { BCLDebug.Assert(array != null, "Array can't be null"); int len = array.Length; // Handle 0 length byte arrays specially. if (len == 0) { array = new byte[1]; len = 0; } _array = array; _pinningHandle = new GCHandle(array, GCHandleType.Pinned); // Now the byte[] is pinned for the lifetime of this instance. // But I also need to get a pointer to that block of memory... fixed(byte* ptr = _array) Initialize(ptr, len, len, FileAccess.Read, true); } ~PinnedBufferMemoryStream() { Dispose(false); } protected override void Dispose(bool disposing) { if (_isOpen) { _pinningHandle.Free(); _isOpen = false; } #if _DEBUG // To help track down lifetime issues on checked builds, force //a full GC here. if (disposing) { GC.Collect(); GC.WaitForPendingFinalizers(); } #endif base.Dispose(disposing); } } }
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DataGridViewCellCancelEventArgs.cs
- XmlReflectionImporter.cs
- InsufficientMemoryException.cs
- QueryConverter.cs
- NativeBuffer.cs
- OperandQuery.cs
- Transform3DCollection.cs
- ProcessThread.cs
- Attributes.cs
- TableStyle.cs
- NonParentingControl.cs
- X509ClientCertificateAuthenticationElement.cs
- TCPListener.cs
- ValidationHelpers.cs
- WebBrowserUriTypeConverter.cs
- TraceListeners.cs
- OdbcReferenceCollection.cs
- Cloud.cs
- InertiaExpansionBehavior.cs
- DesignTimeVisibleAttribute.cs
- Attribute.cs
- SimpleTextLine.cs
- ProfileGroupSettings.cs
- BrushValueSerializer.cs
- AppDomainProtocolHandler.cs
- OdbcEnvironment.cs
- SmtpFailedRecipientException.cs
- JsonServiceDocumentSerializer.cs
- NativeMethods.cs
- DoubleConverter.cs
- ResourceKey.cs
- TextServicesCompartment.cs
- IndexOutOfRangeException.cs
- HttpCapabilitiesSectionHandler.cs
- CodeValidator.cs
- DataRelation.cs
- DescendentsWalker.cs
- ClientSettingsStore.cs
- MachineSettingsSection.cs
- PenThreadWorker.cs
- XmlHierarchicalEnumerable.cs
- StorageModelBuildProvider.cs
- CharUnicodeInfo.cs
- DrawingBrush.cs
- Sentence.cs
- TextSpanModifier.cs
- InstancePersistenceException.cs
- SmiEventSink_Default.cs
- CodeTypeParameterCollection.cs
- HttpListener.cs
- EntityCommandCompilationException.cs
- ToolStripLocationCancelEventArgs.cs
- RemotingAttributes.cs
- METAHEADER.cs
- Group.cs
- Point3DAnimationUsingKeyFrames.cs
- HTMLTagNameToTypeMapper.cs
- LayoutInformation.cs
- DataFormat.cs
- RsaKeyIdentifierClause.cs
- VirtualPathProvider.cs
- FaultReason.cs
- SchemaNames.cs
- Math.cs
- FactoryId.cs
- TagMapInfo.cs
- FixedMaxHeap.cs
- XmlSchemaChoice.cs
- _AutoWebProxyScriptHelper.cs
- SettingsSavedEventArgs.cs
- SqlConnectionStringBuilder.cs
- DesignerDeviceConfig.cs
- ProviderUtil.cs
- WebZone.cs
- DataControlFieldsEditor.cs
- TransactionScope.cs
- X509Extension.cs
- HebrewCalendar.cs
- Empty.cs
- ExpressionLink.cs
- TemplatedAdorner.cs
- XmlToDatasetMap.cs
- RootBuilder.cs
- codemethodreferenceexpression.cs
- ArrangedElementCollection.cs
- Matrix.cs
- SqlClientFactory.cs
- MissingMemberException.cs
- StorageScalarPropertyMapping.cs
- FontStyles.cs
- RenderOptions.cs
- SoapServerMessage.cs
- ListViewInsertedEventArgs.cs
- ServiceDescriptions.cs
- OperationGenerator.cs
- ApplicationManager.cs
- VisualBrush.cs
- BitmapCodecInfo.cs
- CodeGen.cs
- UnsafePeerToPeerMethods.cs