Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Base / MS / Internal / IO / Packaging / TrackingMemoryStream.cs / 1305600 / 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: IgorBel: Initial creation. // 11/08/2005: BruceMac: 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
- HttpStaticObjectsCollectionWrapper.cs
- IRCollection.cs
- SpecialTypeDataContract.cs
- ColumnMapVisitor.cs
- TrustLevelCollection.cs
- DoubleStorage.cs
- TypedDatasetGenerator.cs
- HttpRequestCacheValidator.cs
- SessionIDManager.cs
- DeclarativeExpressionConditionDeclaration.cs
- PartialClassGenerationTaskInternal.cs
- CustomWebEventKey.cs
- CookieProtection.cs
- HitTestParameters.cs
- ResourceType.cs
- UnknownBitmapDecoder.cs
- WorkflowRuntimeSection.cs
- UserInitiatedNavigationPermission.cs
- StreamWriter.cs
- LockCookie.cs
- GridEntryCollection.cs
- CustomTypeDescriptor.cs
- FtpRequestCacheValidator.cs
- HtmlForm.cs
- StylusTip.cs
- HttpValueCollection.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- HostingEnvironmentException.cs
- EventDescriptorCollection.cs
- PropertyFilterAttribute.cs
- CheckedPointers.cs
- Interop.cs
- ImportContext.cs
- WindowsRegion.cs
- ipaddressinformationcollection.cs
- FilterQueryOptionExpression.cs
- PersonalizationEntry.cs
- SrgsElementList.cs
- ExitEventArgs.cs
- ManagedIStream.cs
- HuffModule.cs
- ActivityStatusChangeEventArgs.cs
- WindowsTab.cs
- TreeNodeStyle.cs
- DeviceContext.cs
- RuntimeEnvironment.cs
- Ref.cs
- CommandHelper.cs
- CurrentChangingEventArgs.cs
- DataGridViewComponentPropertyGridSite.cs
- EntityViewGenerationAttribute.cs
- IDQuery.cs
- StorageAssociationSetMapping.cs
- NavigatorInput.cs
- CaseCqlBlock.cs
- BlobPersonalizationState.cs
- XmlSerializerAssemblyAttribute.cs
- ApplicationException.cs
- SafeNativeMethodsCLR.cs
- ObjectViewListener.cs
- Assembly.cs
- HashCryptoHandle.cs
- MissingMethodException.cs
- XmlEntity.cs
- NodeInfo.cs
- ToolStripPanelRenderEventArgs.cs
- TreeViewImageKeyConverter.cs
- ScrollBarRenderer.cs
- DefaultAsyncDataDispatcher.cs
- InstanceCreationEditor.cs
- peersecurityelement.cs
- Span.cs
- MarshalByRefObject.cs
- LambdaCompiler.Unary.cs
- MetaModel.cs
- HoistedLocals.cs
- SapiAttributeParser.cs
- ObjectAssociationEndMapping.cs
- UrlMappingsSection.cs
- BitmapEffectDrawing.cs
- _CookieModule.cs
- CodeStatementCollection.cs
- WithStatement.cs
- ToolStripContainerDesigner.cs
- AppDomainUnloadedException.cs
- PathFigureCollectionValueSerializer.cs
- ScrollEvent.cs
- DispatcherTimer.cs
- InternalDuplexBindingElement.cs
- TreeView.cs
- BrushConverter.cs
- ListManagerBindingsCollection.cs
- Matrix.cs
- processwaithandle.cs
- StringExpressionSet.cs
- _AutoWebProxyScriptHelper.cs
- JavascriptCallbackBehaviorAttribute.cs
- GenericPrincipal.cs
- FunctionImportMapping.cs
- AccessDataSourceWizardForm.cs