Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Base / MS / Internal / IO / Packaging / TrackingMemoryStream.cs / 1 / TrackingMemoryStream.cs
//------------------------------------------------------------------------------ // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: // This is a stream that is capable of reporting data usage up to the registered // owner // // History: // 05/24/2005: [....]: Initial creation. // 11/08/2005: [....]: Change namespace // //----------------------------------------------------------------------------- using System; using System.Diagnostics; using System.IO; namespace MS.Internal.IO.Packaging { // making this class sealed as it is taking advantage of some Virtual methods // in MemoryStream(Capacity); therefore, there is a danger of subclass overriding those and unexpected // behavior changes. Consider calls from Constructor->ReportIfNecessary->Capacity // prior to unsealing this class (they would be marked as FxCop violations) internal sealed class TrackingMemoryStream : MemoryStream { // other constructors can be added later, as we need them, for now we only use the following 2 internal TrackingMemoryStream(ITrackingMemoryStreamFactory memoryStreamFactory): base() { // although we could have implemented this constructor in terms of the other constructor; we shouldn't. // It seems safer to always call the equivalent base class constructor, as we might be ignorant about // some minor differences between various MemoryStream constructors Debug.Assert(memoryStreamFactory != null); _memoryStreamFactory = memoryStreamFactory; ReportIfNeccessary(); } internal TrackingMemoryStream (ITrackingMemoryStreamFactory memoryStreamFactory, Int32 capacity) : base(capacity) { Debug.Assert(memoryStreamFactory != null); _memoryStreamFactory = memoryStreamFactory; ReportIfNeccessary(); } // Here are the overrides for members that could possible result in changes in the allocated memory public override int Read(byte[] buffer, int offset, int count) { int result = base.Read(buffer, offset, count); ReportIfNeccessary(); return result; } public override void Write(byte[] buffer, int offset, int count) { base.Write(buffer, offset, count); ReportIfNeccessary(); } public override void SetLength(long value) { base.SetLength(value); ReportIfNeccessary(); } protected override void Dispose(bool disposing) { try { if (disposing) { if (_memoryStreamFactory != null) { // release all the memory, and report it to the TrackingMemoryStreamFactory SetLength(0); Capacity = 0; ReportIfNeccessary(); _memoryStreamFactory = null; } } } finally { base.Dispose(disposing); } } private void ReportIfNeccessary () { if (this.Capacity !=_lastReportedHighWaterMark) { // we need to report the new memory being allocated as a part of the constructor _memoryStreamFactory.ReportMemoryUsageDelta(checked(this.Capacity - _lastReportedHighWaterMark)); _lastReportedHighWaterMark = this.Capacity; } } private ITrackingMemoryStreamFactory _memoryStreamFactory; private int _lastReportedHighWaterMark; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PrimaryKeyTypeConverter.cs
- ChtmlTextWriter.cs
- BooleanKeyFrameCollection.cs
- ExtendedTransformFactory.cs
- Utils.cs
- RemotingConfiguration.cs
- Proxy.cs
- EmptyEnumerable.cs
- CatalogZoneBase.cs
- TrustLevelCollection.cs
- TypeConverterValueSerializer.cs
- Win32MouseDevice.cs
- PropertyConverter.cs
- DefaultWorkflowTransactionService.cs
- COM2ExtendedUITypeEditor.cs
- HelpEvent.cs
- ProxyGenerationError.cs
- ResolveMatchesMessageCD1.cs
- ItemCheckEvent.cs
- FixedLineResult.cs
- _CommandStream.cs
- VirtualPathProvider.cs
- _ProxyChain.cs
- ExtenderControl.cs
- ImageFormatConverter.cs
- SHA512Managed.cs
- __Filters.cs
- Stackframe.cs
- DocumentGridContextMenu.cs
- SizeAnimation.cs
- EditorZoneDesigner.cs
- CodeActivity.cs
- AudioSignalProblemOccurredEventArgs.cs
- CallbackHandler.cs
- WebEventTraceProvider.cs
- NavigationWindowAutomationPeer.cs
- LocalValueEnumerator.cs
- DependencyObjectProvider.cs
- MenuBindingsEditor.cs
- ExpressionWriter.cs
- UnmanagedMemoryStream.cs
- DataFormats.cs
- StructuralCache.cs
- DefaultBindingPropertyAttribute.cs
- RectConverter.cs
- ArrayTypeMismatchException.cs
- ExecutionContext.cs
- MultiView.cs
- Win32Native.cs
- PointAnimation.cs
- ThreadPool.cs
- RoleManagerModule.cs
- VirtualizingStackPanel.cs
- peernodestatemanager.cs
- SynchronizedKeyedCollection.cs
- InvalidOleVariantTypeException.cs
- ResolveResponseInfo.cs
- AxHostDesigner.cs
- Decimal.cs
- FlowLayoutPanelDesigner.cs
- ServiceOperationParameter.cs
- HexParser.cs
- InvalidDataException.cs
- KnownBoxes.cs
- DrawingContextDrawingContextWalker.cs
- XmlResolver.cs
- PolicyStatement.cs
- ConfigurationManager.cs
- Int32CAMarshaler.cs
- InvalidAsynchronousStateException.cs
- ExceptionHandlers.cs
- ScrollChangedEventArgs.cs
- ConvertEvent.cs
- RemotingException.cs
- IPipelineRuntime.cs
- RunInstallerAttribute.cs
- Helpers.cs
- TerminateSequence.cs
- RsaKeyIdentifierClause.cs
- FloatMinMaxAggregationOperator.cs
- ConfigXmlText.cs
- CodeArrayIndexerExpression.cs
- Canvas.cs
- BamlRecordWriter.cs
- DelegateHelpers.cs
- XmlDataContract.cs
- EntityDataSourceEntitySetNameItem.cs
- TableAutomationPeer.cs
- SchemaDeclBase.cs
- ContextProperty.cs
- ListViewCommandEventArgs.cs
- ListCommandEventArgs.cs
- HtmlCommandAdapter.cs
- TableRow.cs
- GroupItem.cs
- unsafenativemethodsother.cs
- TypeForwardedToAttribute.cs
- ProviderConnectionPoint.cs
- ObjectListCommandsPage.cs
- Rotation3DAnimation.cs