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
- EntityDataSourceConfigureObjectContext.cs
- HeaderedItemsControl.cs
- EntitySqlQueryState.cs
- PropertyToken.cs
- JavaScriptSerializer.cs
- Triangle.cs
- RouteParser.cs
- ImageCollectionEditor.cs
- XPathDescendantIterator.cs
- BaseTreeIterator.cs
- HttpSocketManager.cs
- SettingsPropertyCollection.cs
- BamlVersionHeader.cs
- ImmComposition.cs
- TextRangeAdaptor.cs
- SoapDocumentServiceAttribute.cs
- WindowsContainer.cs
- Decoder.cs
- DataSourceExpression.cs
- XmlReflectionMember.cs
- ComponentResourceKeyConverter.cs
- IRCollection.cs
- ParameterModifier.cs
- LineMetrics.cs
- TextDecorationCollectionConverter.cs
- TextPointer.cs
- Assert.cs
- SmtpSection.cs
- DbExpressionVisitor.cs
- CachedFontFace.cs
- EntityRecordInfo.cs
- DbConnectionClosed.cs
- TreeView.cs
- ProviderMetadata.cs
- DataGridViewSelectedColumnCollection.cs
- ObjRef.cs
- MobileSysDescriptionAttribute.cs
- DesignerWidgets.cs
- AdornerDecorator.cs
- AssertHelper.cs
- FtpWebResponse.cs
- _ContextAwareResult.cs
- cache.cs
- handlecollector.cs
- Helpers.cs
- MultiSelectRootGridEntry.cs
- RequestQueue.cs
- Animatable.cs
- TemplateFactory.cs
- SamlAttributeStatement.cs
- WebPartZoneBase.cs
- ByteKeyFrameCollection.cs
- ChildTable.cs
- basecomparevalidator.cs
- Screen.cs
- XPathItem.cs
- Serializer.cs
- DatatypeImplementation.cs
- DecoderReplacementFallback.cs
- ModelItemImpl.cs
- _SslSessionsCache.cs
- AuthorizationContext.cs
- UnsafeNativeMethods.cs
- CngKey.cs
- WebPartConnectionsCloseVerb.cs
- MobileControlPersister.cs
- SrgsElementFactoryCompiler.cs
- TreeNodeCollectionEditor.cs
- _SslSessionsCache.cs
- TrustSection.cs
- InvalidDataContractException.cs
- DataGridViewTopRowAccessibleObject.cs
- EditingContext.cs
- SqlFormatter.cs
- ResourceDisplayNameAttribute.cs
- XPathDocumentBuilder.cs
- EntityContainerEmitter.cs
- WebFaultClientMessageInspector.cs
- ClonableStack.cs
- Int32.cs
- EventArgs.cs
- LicenseManager.cs
- DateTimePicker.cs
- OdbcConnectionFactory.cs
- PagesChangedEventArgs.cs
- BuildProviderInstallComponent.cs
- XPathDescendantIterator.cs
- ConsumerConnectionPointCollection.cs
- ClientBuildManager.cs
- SQLStringStorage.cs
- ProfileSettingsCollection.cs
- Queue.cs
- SimpleHandlerFactory.cs
- SiteMapNode.cs
- EnvironmentPermission.cs
- FixedSOMFixedBlock.cs
- DesignTimeDataBinding.cs
- base64Transforms.cs
- AtomContentProperty.cs
- Decoder.cs