Code:
/ DotNET / DotNET / 8.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
- ProviderSettingsCollection.cs
- SafeProcessHandle.cs
- SBCSCodePageEncoding.cs
- DynamicUpdateCommand.cs
- TransportContext.cs
- LocalizabilityAttribute.cs
- RecognitionEventArgs.cs
- SqlCommandAsyncResult.cs
- BuilderPropertyEntry.cs
- TraceHandlerErrorFormatter.cs
- PropertyTabAttribute.cs
- DatePickerTextBox.cs
- LogSwitch.cs
- RowsCopiedEventArgs.cs
- ChannelServices.cs
- OraclePermission.cs
- WebReferencesBuildProvider.cs
- ResourceContainerWrapper.cs
- ConnectionStringEditor.cs
- WebScriptServiceHost.cs
- InvalidFilterCriteriaException.cs
- TemplateComponentConnector.cs
- DbBuffer.cs
- ColumnMapTranslator.cs
- TextRunProperties.cs
- ProtectedConfigurationProviderCollection.cs
- MatrixAnimationUsingPath.cs
- HWStack.cs
- SqlExpander.cs
- XmlException.cs
- ReadContentAsBinaryHelper.cs
- AutomationElementCollection.cs
- NativeMethods.cs
- UrlParameterWriter.cs
- NativeActivityFaultContext.cs
- LayoutTableCell.cs
- MergePropertyDescriptor.cs
- FlowPosition.cs
- SslStream.cs
- Function.cs
- PersonalizationStateQuery.cs
- AuthenticationSection.cs
- DataListItem.cs
- ColumnClickEvent.cs
- ViewLoader.cs
- FillErrorEventArgs.cs
- RoleManagerSection.cs
- __Filters.cs
- MarshalDirectiveException.cs
- SafePointer.cs
- SchemaTableColumn.cs
- TextContainerChangedEventArgs.cs
- NativeMethods.cs
- CreateRefExpr.cs
- TextDocumentView.cs
- DataObjectFieldAttribute.cs
- FlowPosition.cs
- AppDomainProtocolHandler.cs
- WebAdminConfigurationHelper.cs
- ScrollPattern.cs
- WebPartActionVerb.cs
- MultiSelector.cs
- sitestring.cs
- PolyQuadraticBezierSegmentFigureLogic.cs
- XmlElementAttribute.cs
- ListViewPagedDataSource.cs
- AuthenticationSection.cs
- WebPartConnectionCollection.cs
- RuntimeArgumentHandle.cs
- DataGridViewTextBoxCell.cs
- SQLDouble.cs
- PrinterUnitConvert.cs
- BounceEase.cs
- CompositeActivityValidator.cs
- FormatException.cs
- BinaryReader.cs
- UiaCoreApi.cs
- XmlMemberMapping.cs
- CompiledRegexRunnerFactory.cs
- SqlBinder.cs
- ImpersonateTokenRef.cs
- ConstantCheck.cs
- Polygon.cs
- FactoryRecord.cs
- PropertyValue.cs
- ProtectedProviderSettings.cs
- IpcClientManager.cs
- CommonGetThemePartSize.cs
- ProtocolElement.cs
- AliasedSlot.cs
- DesignTimeHTMLTextWriter.cs
- Models.cs
- WaitHandleCannotBeOpenedException.cs
- MouseActionValueSerializer.cs
- XmlAggregates.cs
- COM2ICategorizePropertiesHandler.cs
- TaiwanCalendar.cs
- DataPagerFieldCollection.cs
- Stackframe.cs
- StoreAnnotationsMap.cs