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
- Exceptions.cs
- SystemKeyConverter.cs
- ProtocolImporter.cs
- XamlStream.cs
- XmlAnyElementAttributes.cs
- SourceChangedEventArgs.cs
- ProfileProvider.cs
- MaskedTextBoxTextEditorDropDown.cs
- IndexedSelectQueryOperator.cs
- BackStopAuthenticationModule.cs
- WebPartCatalogCloseVerb.cs
- PathTooLongException.cs
- CollectionViewGroup.cs
- BaseValidator.cs
- _StreamFramer.cs
- PerfService.cs
- EncodingStreamWrapper.cs
- WindowsAltTab.cs
- ResourceDescriptionAttribute.cs
- QueryHandler.cs
- MultipartContentParser.cs
- InsufficientMemoryException.cs
- RSAPKCS1SignatureDeformatter.cs
- OAVariantLib.cs
- SymDocumentType.cs
- SecurityManager.cs
- Assert.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- UTF7Encoding.cs
- BordersPage.cs
- SpellCheck.cs
- MimeMapping.cs
- IntPtr.cs
- OdbcDataAdapter.cs
- BamlRecords.cs
- DataErrorValidationRule.cs
- KnownColorTable.cs
- BaseDataListDesigner.cs
- TreeNodeEventArgs.cs
- DesignTimeTemplateParser.cs
- MappingMetadataHelper.cs
- DragDeltaEventArgs.cs
- CategoryNameCollection.cs
- ExpandCollapsePattern.cs
- InvokePattern.cs
- BinaryConverter.cs
- IisTraceWebEventProvider.cs
- PerformanceCounterPermissionAttribute.cs
- XmlHierarchicalEnumerable.cs
- KeyValueSerializer.cs
- ContextProperty.cs
- PointIndependentAnimationStorage.cs
- HttpListenerRequest.cs
- StateDesigner.LayoutSelectionGlyph.cs
- RijndaelCryptoServiceProvider.cs
- RestHandlerFactory.cs
- ClickablePoint.cs
- StorageEntityContainerMapping.cs
- XsltContext.cs
- ToolbarAUtomationPeer.cs
- ReadOnlyDataSourceView.cs
- SortDescriptionCollection.cs
- AliasedSlot.cs
- SatelliteContractVersionAttribute.cs
- TdsParameterSetter.cs
- SelectionProviderWrapper.cs
- EntityProviderFactory.cs
- PrivilegedConfigurationManager.cs
- Selection.cs
- DataGridTable.cs
- DiscreteKeyFrames.cs
- Root.cs
- RightsManagementInformation.cs
- XmlCDATASection.cs
- KeyTimeConverter.cs
- StateBag.cs
- UrlMapping.cs
- DictionaryEntry.cs
- LongTypeConverter.cs
- GuidelineSet.cs
- Debug.cs
- JsonWriter.cs
- EventLogPermissionAttribute.cs
- InputLanguageCollection.cs
- ListViewGroupConverter.cs
- OperandQuery.cs
- ContextProperty.cs
- ContainerControl.cs
- SiteMapNodeCollection.cs
- PartialCachingControl.cs
- ElementHost.cs
- EventLogEntryCollection.cs
- BridgeDataRecord.cs
- ColumnMapVisitor.cs
- DotAtomReader.cs
- ProfileGroupSettingsCollection.cs
- ObjectStateEntry.cs
- EditingMode.cs
- ItemCheckEvent.cs
- SerializerWriterEventHandlers.cs