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
- cookiecontainer.cs
- ProcessInfo.cs
- Trigger.cs
- UnsupportedPolicyOptionsException.cs
- RowToParametersTransformer.cs
- RoleManagerSection.cs
- Parsers.cs
- SectionRecord.cs
- ResourceBinder.cs
- HostingPreferredMapPath.cs
- ActivityExecutionFilter.cs
- DataMisalignedException.cs
- HealthMonitoringSectionHelper.cs
- ObjectReaderCompiler.cs
- ParameterBinding.cs
- BitmapEffect.cs
- TextMetrics.cs
- PasswordDeriveBytes.cs
- CodeTypeOfExpression.cs
- DataGridViewCheckBoxColumn.cs
- XPathNavigator.cs
- CalendarTable.cs
- RegistrationContext.cs
- SqlTopReducer.cs
- StickyNoteHelper.cs
- CodeAttributeDeclaration.cs
- XmlNodeChangedEventManager.cs
- XmlStreamStore.cs
- TextRangeEdit.cs
- GridViewCellAutomationPeer.cs
- SourceItem.cs
- XhtmlBasicTextBoxAdapter.cs
- SessionIDManager.cs
- NavigateEvent.cs
- FactoryRecord.cs
- RegexBoyerMoore.cs
- InputLangChangeEvent.cs
- RelatedCurrencyManager.cs
- StrokeCollection.cs
- Selection.cs
- MasterPage.cs
- FormViewInsertEventArgs.cs
- EventToken.cs
- ClientSettingsStore.cs
- IMembershipProvider.cs
- FontSource.cs
- OleDbDataReader.cs
- SafeTimerHandle.cs
- ThicknessKeyFrameCollection.cs
- TemplateBindingExpressionConverter.cs
- HashCryptoHandle.cs
- XmlSchemaSimpleTypeRestriction.cs
- Peer.cs
- CurrencyManager.cs
- _Rfc2616CacheValidators.cs
- PowerModeChangedEventArgs.cs
- OdbcException.cs
- ModelUIElement3D.cs
- FactoryGenerator.cs
- GradientBrush.cs
- GenericTypeParameterBuilder.cs
- RootBuilder.cs
- ColorKeyFrameCollection.cs
- WebPartsPersonalizationAuthorization.cs
- PointAnimationUsingPath.cs
- UInt64.cs
- RegistryConfigurationProvider.cs
- ServiceTimeoutsElement.cs
- InternalCache.cs
- AssemblyNameProxy.cs
- DesignerVerbCollection.cs
- SqlDataSourceSelectingEventArgs.cs
- XmlDataLoader.cs
- XmlSchemaNotation.cs
- ObjectStateEntryOriginalDbUpdatableDataRecord.cs
- CapabilitiesPattern.cs
- DataList.cs
- UnsafeNativeMethods.cs
- FtpRequestCacheValidator.cs
- VectorAnimationBase.cs
- WriterOutput.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- AsyncDataRequest.cs
- CustomDictionarySources.cs
- AesCryptoServiceProvider.cs
- TogglePatternIdentifiers.cs
- HttpRuntimeSection.cs
- SortDescriptionCollection.cs
- ResourcePermissionBaseEntry.cs
- TemplateNameScope.cs
- SqlLiftIndependentRowExpressions.cs
- CfgParser.cs
- CanExecuteRoutedEventArgs.cs
- ExpressionPrefixAttribute.cs
- ChannelServices.cs
- EndPoint.cs
- ScopeElement.cs
- WebServiceData.cs
- DictionaryKeyPropertyAttribute.cs
- TextRangeAdaptor.cs