Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / IO / PinnedBufferMemoryStream.cs / 1305376 / 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; using System.Diagnostics.Contracts; namespace System.IO { internal sealed unsafe class PinnedBufferMemoryStream : UnmanagedMemoryStream { private byte[] _array; private GCHandle _pinningHandle; // The new inheritance model requires a Critical default ctor since base (UnmanagedMemoryStream) has one [System.Security.SecurityCritical] private PinnedBufferMemoryStream():base(){} [System.Security.SecurityCritical] // auto-generated internal PinnedBufferMemoryStream(byte[] array) { Contract.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); } [System.Security.SecuritySafeCritical] // auto-generated 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- FigureParaClient.cs
- NonVisualControlAttribute.cs
- ListItemsPage.cs
- SiteMapNode.cs
- SymbolDocumentInfo.cs
- CodeParameterDeclarationExpressionCollection.cs
- PhysicalAddress.cs
- XmlElementAttribute.cs
- TableColumnCollection.cs
- documentsequencetextview.cs
- DoubleLinkList.cs
- XPathAncestorQuery.cs
- SamlConditions.cs
- sqlser.cs
- HttpWebRequestElement.cs
- ArrayConverter.cs
- LocatorPartList.cs
- SimpleWebHandlerParser.cs
- UpdateEventArgs.cs
- QilPatternVisitor.cs
- CqlParser.cs
- AccessDataSourceView.cs
- EntityDataSourceEntitySetNameItem.cs
- AssemblyAttributesGoHere.cs
- SubMenuStyle.cs
- UshortList2.cs
- MergablePropertyAttribute.cs
- EraserBehavior.cs
- PersonalizationStateInfoCollection.cs
- ButtonFieldBase.cs
- GenericsInstances.cs
- PersonalizationState.cs
- GridViewRowEventArgs.cs
- Transform.cs
- ConfigXmlAttribute.cs
- InternalMappingException.cs
- FixedTextBuilder.cs
- Char.cs
- HtmlMeta.cs
- Enum.cs
- MouseGestureValueSerializer.cs
- Literal.cs
- XmlSigningNodeWriter.cs
- EventRoute.cs
- TemplateAction.cs
- ActiveXMessageFormatter.cs
- WebDisplayNameAttribute.cs
- QilReference.cs
- IISUnsafeMethods.cs
- MsmqIntegrationReceiveParameters.cs
- SqlCacheDependencyDatabaseCollection.cs
- ExtendedProperty.cs
- DynamicDataRoute.cs
- SendingRequestEventArgs.cs
- MachineKeyConverter.cs
- SHA1CryptoServiceProvider.cs
- ClientUtils.cs
- TCPListener.cs
- InspectionWorker.cs
- XmlIlVisitor.cs
- MachineSettingsSection.cs
- BitmapCacheBrush.cs
- OptimalBreakSession.cs
- XPathScanner.cs
- RemotingServices.cs
- LogEntrySerializer.cs
- Row.cs
- DetailsViewRow.cs
- XMLSchema.cs
- XmlNamespaceManager.cs
- UInt64Converter.cs
- NeedSkipTokenVisitor.cs
- WindowsGraphics.cs
- ProxyGenerator.cs
- EnumerableCollectionView.cs
- CompositeFontFamily.cs
- LoadItemsEventArgs.cs
- OutputCacheSettingsSection.cs
- UnaryNode.cs
- FileUpload.cs
- Compiler.cs
- ViewCellSlot.cs
- NotifyIcon.cs
- ListViewItemMouseHoverEvent.cs
- DynamicUpdateCommand.cs
- Shared.cs
- CodeTypeParameterCollection.cs
- AssemblyHash.cs
- DesigntimeLicenseContextSerializer.cs
- SimpleHandlerFactory.cs
- GestureRecognitionResult.cs
- TdsParser.cs
- ProcessingInstructionAction.cs
- TimeSpanValidator.cs
- XmlMessageFormatter.cs
- RegexCompilationInfo.cs
- HTMLTextWriter.cs
- AnnotationResourceChangedEventArgs.cs
- WriterOutput.cs
- InstanceCreationEditor.cs