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
- IISUnsafeMethods.cs
- TreeViewDesigner.cs
- InkCanvasAutomationPeer.cs
- CommandEventArgs.cs
- StaticSiteMapProvider.cs
- MaterializeFromAtom.cs
- _TimerThread.cs
- ArgumentNullException.cs
- Suspend.cs
- GPStream.cs
- BuildProvider.cs
- DesignTimeHTMLTextWriter.cs
- NavigationFailedEventArgs.cs
- ZipIOFileItemStream.cs
- AttributeEmitter.cs
- SectionInformation.cs
- TreeViewDesigner.cs
- TerminateDesigner.cs
- HtmlMeta.cs
- CommandHelpers.cs
- CompositeFontParser.cs
- ChannelSinkStacks.cs
- TableLayoutSettingsTypeConverter.cs
- ForwardPositionQuery.cs
- TemplateContainer.cs
- PropertyIDSet.cs
- AstTree.cs
- ControlBindingsCollection.cs
- ProviderConnectionPoint.cs
- ModelServiceImpl.cs
- ReferenceSchema.cs
- StatusCommandUI.cs
- CodeNamespaceImport.cs
- ButtonColumn.cs
- WeakReferenceKey.cs
- SqlCaseSimplifier.cs
- ComponentCache.cs
- IdnMapping.cs
- XmlConvert.cs
- MultipartIdentifier.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- TableLayout.cs
- PeerNameRegistration.cs
- PropertyValidationContext.cs
- _UriTypeConverter.cs
- ReferentialConstraint.cs
- HostingEnvironment.cs
- TdsParserStateObject.cs
- DuplicateMessageDetector.cs
- DataGridViewCell.cs
- CollectionContainer.cs
- ResolveCriteriaApril2005.cs
- ProgressiveCrcCalculatingStream.cs
- IItemContainerGenerator.cs
- DesignerAdRotatorAdapter.cs
- Win32Native.cs
- HandoffBehavior.cs
- XPathPatternParser.cs
- ObjectQuery.cs
- PkcsUtils.cs
- FileVersionInfo.cs
- SrgsRulesCollection.cs
- MbpInfo.cs
- SupportedAddressingMode.cs
- HtmlElementCollection.cs
- FlowLayoutPanel.cs
- SqlReferenceCollection.cs
- SmiEventSink.cs
- HttpGetServerProtocol.cs
- StringFreezingAttribute.cs
- HandledMouseEvent.cs
- RadialGradientBrush.cs
- CodeCompiler.cs
- ListContractAdapter.cs
- IntSecurity.cs
- SecurityUtils.cs
- EnvelopedPkcs7.cs
- GorillaCodec.cs
- XMLUtil.cs
- Suspend.cs
- ControlEvent.cs
- SqlDependency.cs
- SqlReferenceCollection.cs
- AudioFormatConverter.cs
- ServiceNameElement.cs
- Propagator.cs
- NameValuePermission.cs
- RelationshipManager.cs
- SequenceDesigner.cs
- OdbcCommandBuilder.cs
- Operand.cs
- XmlUTF8TextReader.cs
- Version.cs
- XmlElementAttributes.cs
- ServerValidateEventArgs.cs
- DbConnectionPoolIdentity.cs
- SqlFlattener.cs
- SqlTopReducer.cs
- TextRange.cs
- TypeBuilderInstantiation.cs