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
- VerticalAlignConverter.cs
- RequestDescription.cs
- QueueException.cs
- MemberInfoSerializationHolder.cs
- ModulesEntry.cs
- SqlWebEventProvider.cs
- HttpPostedFile.cs
- DataColumnMapping.cs
- SqlUserDefinedAggregateAttribute.cs
- AccessedThroughPropertyAttribute.cs
- WebPartUserCapability.cs
- GridItem.cs
- MembershipSection.cs
- PolicyDesigner.cs
- WriteTimeStream.cs
- ReachUIElementCollectionSerializer.cs
- OraclePermission.cs
- SolidColorBrush.cs
- HWStack.cs
- Header.cs
- Single.cs
- ToolboxComponentsCreatedEventArgs.cs
- DetailsViewRow.cs
- WSFederationHttpSecurityMode.cs
- InternalSafeNativeMethods.cs
- Animatable.cs
- WebBrowserProgressChangedEventHandler.cs
- DbMetaDataColumnNames.cs
- XmlSiteMapProvider.cs
- Parser.cs
- WebPartCatalogAddVerb.cs
- XmlBinaryWriterSession.cs
- InstancePersistenceCommandException.cs
- RenderContext.cs
- WorkflowFileItem.cs
- TableCellAutomationPeer.cs
- DefaultMergeHelper.cs
- WpfXamlType.cs
- Utility.cs
- PageAsyncTaskManager.cs
- WSAddressing10ProblemHeaderQNameFault.cs
- Visual3DCollection.cs
- TextDpi.cs
- XmlSerializer.cs
- TypeUtils.cs
- SectionInformation.cs
- ObjectSet.cs
- ParserStreamGeometryContext.cs
- ItemCollection.cs
- SemanticBasicElement.cs
- ControlPropertyNameConverter.cs
- FamilyTypeface.cs
- SecurityManager.cs
- InvalidFilterCriteriaException.cs
- ControllableStoryboardAction.cs
- ExtensionDataReader.cs
- ServiceAuthorizationElement.cs
- TransactedBatchingBehavior.cs
- FrugalList.cs
- ThreadPoolTaskScheduler.cs
- QilFactory.cs
- DefaultProfileManager.cs
- DataTableMapping.cs
- CatalogZoneBase.cs
- InputMethodStateTypeInfo.cs
- DateTimeStorage.cs
- DbConnectionPool.cs
- FastEncoder.cs
- InvalidDataContractException.cs
- ToolStripPanelRow.cs
- LogSwitch.cs
- DecoderFallback.cs
- InstanceOwner.cs
- DocumentCollection.cs
- BitmapCodecInfo.cs
- DbQueryCommandTree.cs
- InkCanvasInnerCanvas.cs
- SqlMethodCallConverter.cs
- ElementHostPropertyMap.cs
- ObjectViewEntityCollectionData.cs
- TimeSpanMinutesConverter.cs
- validationstate.cs
- KnownIds.cs
- UserControlParser.cs
- XMLSyntaxException.cs
- PowerStatus.cs
- SqlSelectClauseBuilder.cs
- XmlLanguageConverter.cs
- XPathPatternBuilder.cs
- NamespaceCollection.cs
- tibetanshape.cs
- SatelliteContractVersionAttribute.cs
- UnaryNode.cs
- ImageFormat.cs
- AssociatedControlConverter.cs
- PersistenceTypeAttribute.cs
- ThousandthOfEmRealPoints.cs
- CorrelationManager.cs
- Automation.cs
- UnmanagedMarshal.cs