Code:
/ FX-1434 / FX-1434 / 1.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
- PlatformNotSupportedException.cs
- CompressionTransform.cs
- CreateSequence.cs
- XmlSchemaRedefine.cs
- XmlBinaryReader.cs
- GeneratedContractType.cs
- SuppressMessageAttribute.cs
- DebugTrace.cs
- IndicCharClassifier.cs
- OLEDB_Util.cs
- CryptoApi.cs
- KnownIds.cs
- Module.cs
- UserControlAutomationPeer.cs
- ExtensionSimplifierMarkupObject.cs
- WebConfigurationHostFileChange.cs
- latinshape.cs
- ServiceReference.cs
- BitHelper.cs
- MemberProjectedSlot.cs
- PropertyRecord.cs
- HttpWebRequestElement.cs
- LassoSelectionBehavior.cs
- StringComparer.cs
- MultiView.cs
- AutomationTextAttribute.cs
- IdentitySection.cs
- ParsedAttributeCollection.cs
- TargetControlTypeAttribute.cs
- ExtensionWindow.cs
- BuilderElements.cs
- PeerEndPoint.cs
- AsymmetricSignatureFormatter.cs
- SubordinateTransaction.cs
- OdbcEnvironmentHandle.cs
- Message.cs
- BamlRecordReader.cs
- ColorConverter.cs
- HttpListenerRequest.cs
- Transaction.cs
- storepermission.cs
- GenericTextProperties.cs
- TargetInvocationException.cs
- WindowsFont.cs
- EmptyEnumerable.cs
- QilChoice.cs
- WebPartUtil.cs
- ProviderBase.cs
- LocalValueEnumerator.cs
- sqlpipe.cs
- ErrorEventArgs.cs
- FormViewPageEventArgs.cs
- Dispatcher.cs
- DetailsViewUpdatedEventArgs.cs
- NullEntityWrapper.cs
- BindingContext.cs
- SqlFunctionAttribute.cs
- XPathSingletonIterator.cs
- LogEntryHeaderv1Deserializer.cs
- KeyedHashAlgorithm.cs
- DataGridItemCollection.cs
- SystemInformation.cs
- JapaneseLunisolarCalendar.cs
- DataTrigger.cs
- GenericAuthenticationEventArgs.cs
- DesignerLoader.cs
- autovalidator.cs
- XXXInfos.cs
- EpmSyndicationContentDeSerializer.cs
- SQLStringStorage.cs
- InfoCardRSAPKCS1SignatureFormatter.cs
- _HTTPDateParse.cs
- TimeManager.cs
- CodeTypeDelegate.cs
- ProtocolImporter.cs
- WorkflowInstanceExtensionProvider.cs
- XPathMessageFilter.cs
- StopStoryboard.cs
- EntityClassGenerator.cs
- WebPartConnectionCollection.cs
- MetadataItem_Static.cs
- XmlMembersMapping.cs
- SchemaElementDecl.cs
- InvalidFilterCriteriaException.cs
- ValueUnavailableException.cs
- Animatable.cs
- ExpressionNode.cs
- Light.cs
- SortedList.cs
- Point3DKeyFrameCollection.cs
- TypeReference.cs
- WhitespaceRuleReader.cs
- XmlSchemaSimpleContent.cs
- UnicodeEncoding.cs
- MergePropertyDescriptor.cs
- FrameworkElementFactory.cs
- SqlRowUpdatedEvent.cs
- ProfileProvider.cs
- SQLDecimalStorage.cs
- XmlSchemaImporter.cs