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
- MulticastOption.cs
- InfoCardRSAOAEPKeyExchangeFormatter.cs
- CodeCastExpression.cs
- EntityProxyTypeInfo.cs
- AspNetSynchronizationContext.cs
- ColorConvertedBitmap.cs
- DataGridItemCollection.cs
- ProviderConnectionPointCollection.cs
- GridViewUpdateEventArgs.cs
- COM2Enum.cs
- CommandManager.cs
- Run.cs
- ExpressionBuilder.cs
- ColumnHeaderConverter.cs
- Qualifier.cs
- TitleStyle.cs
- PartitionedStreamMerger.cs
- Int64AnimationBase.cs
- TextSchema.cs
- UserMapPath.cs
- XmlEntityReference.cs
- MouseActionConverter.cs
- ModifiableIteratorCollection.cs
- Scene3D.cs
- SendActivity.cs
- NetSectionGroup.cs
- WebPartMenu.cs
- WizardForm.cs
- XmlILConstructAnalyzer.cs
- ComplexPropertyEntry.cs
- SequentialWorkflowRootDesigner.cs
- AutomationElementCollection.cs
- UrlMappingsSection.cs
- X509WindowsSecurityToken.cs
- CodeDirectoryCompiler.cs
- WpfPayload.cs
- Figure.cs
- PaginationProgressEventArgs.cs
- DispatcherFrame.cs
- SqlBulkCopyColumnMappingCollection.cs
- EditorPartCollection.cs
- TagMapCollection.cs
- Region.cs
- HtmlTableCell.cs
- SqlCacheDependencyDatabaseCollection.cs
- OptimizedTemplateContentHelper.cs
- Preprocessor.cs
- FormViewInsertEventArgs.cs
- AnimationTimeline.cs
- FormViewModeEventArgs.cs
- PlainXmlWriter.cs
- InputLanguageCollection.cs
- Processor.cs
- DataGridViewCheckBoxCell.cs
- OleDbParameter.cs
- ConstraintEnumerator.cs
- DesignerActionPanel.cs
- IItemContainerGenerator.cs
- DocumentEventArgs.cs
- RemoteWebConfigurationHostStream.cs
- TextParagraph.cs
- CompensationHandlingFilter.cs
- HtmlElementCollection.cs
- BaseTemplatedMobileComponentEditor.cs
- NameObjectCollectionBase.cs
- HttpConfigurationSystem.cs
- ExtentKey.cs
- AuthenticatedStream.cs
- ClientRoleProvider.cs
- UrlPropertyAttribute.cs
- ComponentConverter.cs
- XmlSerializerFactory.cs
- XmlSchemaDocumentation.cs
- EventData.cs
- TypedElement.cs
- Material.cs
- ComponentDispatcher.cs
- COSERVERINFO.cs
- DrawingAttributeSerializer.cs
- Substitution.cs
- WebBrowserHelper.cs
- CodeTypeMemberCollection.cs
- IMembershipProvider.cs
- SplashScreenNativeMethods.cs
- TimeSpanHelper.cs
- HtmlLabelAdapter.cs
- DialogWindow.cs
- DesignerTextWriter.cs
- UrlAuthFailedErrorFormatter.cs
- Grid.cs
- ElementAtQueryOperator.cs
- Array.cs
- FilteredReadOnlyMetadataCollection.cs
- PolicyVersionConverter.cs
- WinEventHandler.cs
- MSHTMLHostUtil.cs
- DynamicControl.cs
- VectorAnimation.cs
- CompositeDataBoundControl.cs
- ChainOfResponsibility.cs