Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / 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); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Identifier.cs
- DetailsViewCommandEventArgs.cs
- BuildResult.cs
- X509Chain.cs
- VirtualDirectoryMapping.cs
- WriteTimeStream.cs
- TraceSection.cs
- DoubleAnimationClockResource.cs
- SystemNetworkInterface.cs
- RecognizerBase.cs
- TreeNodeSelectionProcessor.cs
- UnsignedPublishLicense.cs
- HybridDictionary.cs
- CodeMemberMethod.cs
- GradientStop.cs
- DataGridViewCheckBoxCell.cs
- StylusPointCollection.cs
- StringHandle.cs
- XPathPatternParser.cs
- SqlFileStream.cs
- Group.cs
- ToolBarButtonClickEvent.cs
- ToolBarButtonDesigner.cs
- FileDataSourceCache.cs
- QueryOpeningEnumerator.cs
- tooltip.cs
- BuildProviderUtils.cs
- DataTableClearEvent.cs
- Ref.cs
- VectorCollection.cs
- SiteMapDataSourceView.cs
- Vector3DValueSerializer.cs
- FontStyles.cs
- ConfigErrorGlyph.cs
- Helper.cs
- DataTableNameHandler.cs
- DialogResultConverter.cs
- Exceptions.cs
- StrongNameMembershipCondition.cs
- WindowsSolidBrush.cs
- HashRepartitionStream.cs
- PersistenceMetadataNamespace.cs
- SynchronizationLockException.cs
- Animatable.cs
- InputBindingCollection.cs
- Double.cs
- CapiHashAlgorithm.cs
- SByteStorage.cs
- HiddenFieldPageStatePersister.cs
- CollectionDataContractAttribute.cs
- ExitEventArgs.cs
- CompiledQuery.cs
- EncodingDataItem.cs
- StrongName.cs
- CacheEntry.cs
- RowBinding.cs
- AccessDataSourceWizardForm.cs
- Column.cs
- DeviceContexts.cs
- FixedSOMLineRanges.cs
- ObjectStateEntryOriginalDbUpdatableDataRecord.cs
- PageHandlerFactory.cs
- ModulesEntry.cs
- ResXResourceReader.cs
- DeleteCardRequest.cs
- CryptoStream.cs
- LinearQuaternionKeyFrame.cs
- WebServiceHost.cs
- EditingScope.cs
- _LocalDataStoreMgr.cs
- DataSourceCacheDurationConverter.cs
- SystemShuttingDownException.cs
- DependencyPropertyValueSerializer.cs
- UserControl.cs
- SimpleWebHandlerParser.cs
- WebUtil.cs
- UnknownBitmapDecoder.cs
- HatchBrush.cs
- StringArrayConverter.cs
- HMACRIPEMD160.cs
- ResourceDictionaryCollection.cs
- HTMLTextWriter.cs
- CodeComment.cs
- CqlWriter.cs
- XmlSerializerAssemblyAttribute.cs
- ShaperBuffers.cs
- ContentDisposition.cs
- ReflectTypeDescriptionProvider.cs
- Timer.cs
- DataSet.cs
- GenericWebPart.cs
- Parser.cs
- SourceChangedEventArgs.cs
- TypeToken.cs
- EntityTypeEmitter.cs
- PermissionAttributes.cs
- Typeface.cs
- BridgeDataReader.cs
- Quad.cs
- ArrayListCollectionBase.cs