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
- InteropBitmapSource.cs
- DataObjectSettingDataEventArgs.cs
- LayoutEditorPart.cs
- InvalidDataException.cs
- CounterCreationDataCollection.cs
- NonParentingControl.cs
- IResourceProvider.cs
- OrthographicCamera.cs
- SeekStoryboard.cs
- SweepDirectionValidation.cs
- WebControlsSection.cs
- Part.cs
- VectorAnimation.cs
- SafeRegistryHandle.cs
- ExternalCalls.cs
- SectionVisual.cs
- TerminateDesigner.cs
- TypedMessageConverter.cs
- TypeFieldSchema.cs
- ProgressiveCrcCalculatingStream.cs
- TextRange.cs
- BindingSourceDesigner.cs
- Image.cs
- SQLBinary.cs
- OdbcDataAdapter.cs
- CacheChildrenQuery.cs
- SkinBuilder.cs
- DbConnectionPoolOptions.cs
- KeyValuePairs.cs
- XmlAttribute.cs
- AddingNewEventArgs.cs
- BamlResourceContent.cs
- DateTimeStorage.cs
- GroupDescription.cs
- ExpressionConverter.cs
- MessageEncoderFactory.cs
- hwndwrapper.cs
- SignatureDescription.cs
- ExceptionUtil.cs
- ScriptResourceHandler.cs
- DataTransferEventArgs.cs
- UriTemplateQueryValue.cs
- FixedHighlight.cs
- IMembershipProvider.cs
- AuthenticationModulesSection.cs
- NavigationFailedEventArgs.cs
- NotifyInputEventArgs.cs
- MasterPageBuildProvider.cs
- ConfigurationManager.cs
- AdCreatedEventArgs.cs
- UpdatePanelTriggerCollection.cs
- CodeEntryPointMethod.cs
- MetricEntry.cs
- FormsAuthenticationUserCollection.cs
- XmlSchemaSimpleType.cs
- BindingMAnagerBase.cs
- CodeDelegateCreateExpression.cs
- ReadOnlyPropertyMetadata.cs
- Int64KeyFrameCollection.cs
- HandlerMappingMemo.cs
- HierarchicalDataSourceIDConverter.cs
- SignatureToken.cs
- BamlReader.cs
- ServiceProviders.cs
- CommentAction.cs
- NullableIntMinMaxAggregationOperator.cs
- CodeTypeOfExpression.cs
- NetTcpSection.cs
- SecurityManager.cs
- DefaultMergeHelper.cs
- ApplicationManager.cs
- MaterialGroup.cs
- TriggerActionCollection.cs
- SchemaTableColumn.cs
- XPathDocumentIterator.cs
- RenderingBiasValidation.cs
- StateRuntime.cs
- HMACRIPEMD160.cs
- CurrencyWrapper.cs
- MetadataArtifactLoaderCompositeFile.cs
- TimeSpanMinutesConverter.cs
- FileRecordSequenceHelper.cs
- ServiceInfoCollection.cs
- FrameSecurityDescriptor.cs
- OracleDateTime.cs
- ServiceDocumentFormatter.cs
- OpenTypeLayout.cs
- ObjectViewFactory.cs
- NoClickablePointException.cs
- LogFlushAsyncResult.cs
- PermissionRequestEvidence.cs
- ChtmlTextWriter.cs
- SigningCredentials.cs
- BoundsDrawingContextWalker.cs
- EpmContentSerializerBase.cs
- PropertyTab.cs
- MetadataArtifactLoaderResource.cs
- Utils.cs
- InfoCardAsymmetricCrypto.cs
- FileUtil.cs