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
- DBBindings.cs
- MenuCommand.cs
- XPathScanner.cs
- ipaddressinformationcollection.cs
- SqlServer2KCompatibilityCheck.cs
- ApplicationFileParser.cs
- SvcMapFile.cs
- XPathQilFactory.cs
- PointConverter.cs
- MatrixTransform.cs
- XmlBinaryReader.cs
- dsa.cs
- MultiPropertyDescriptorGridEntry.cs
- TextEffect.cs
- ExpandoObject.cs
- PropertyMap.cs
- FillRuleValidation.cs
- TextRangeEdit.cs
- XmlTextWriter.cs
- DataGridViewAutoSizeModeEventArgs.cs
- COAUTHIDENTITY.cs
- GetKeyedHashRequest.cs
- Types.cs
- LayoutExceptionEventArgs.cs
- ControlParameter.cs
- formatter.cs
- ToolStripItemCollection.cs
- NullableBoolConverter.cs
- ObjectCacheSettings.cs
- QueryStringHandler.cs
- LabelDesigner.cs
- GridViewDeleteEventArgs.cs
- Animatable.cs
- ConstructorNeedsTagAttribute.cs
- IdentityManager.cs
- AlternateView.cs
- sqlpipe.cs
- DataProtectionSecurityStateEncoder.cs
- _LazyAsyncResult.cs
- CroppedBitmap.cs
- CatalogZoneBase.cs
- ApplicationInfo.cs
- FlowDocumentReaderAutomationPeer.cs
- HTTPNotFoundHandler.cs
- ToolStripItemTextRenderEventArgs.cs
- HttpAsyncResult.cs
- ReaderOutput.cs
- Size.cs
- PlainXmlWriter.cs
- MarkupCompilePass1.cs
- SizeLimitedCache.cs
- PickBranch.cs
- Pair.cs
- NativeMethods.cs
- Utils.cs
- AsynchronousChannelMergeEnumerator.cs
- ExtendedPropertyCollection.cs
- XmlSchemaInfo.cs
- ReliabilityContractAttribute.cs
- SqlClientFactory.cs
- DrawingCollection.cs
- SmtpAuthenticationManager.cs
- RadioButtonAutomationPeer.cs
- CodeExpressionCollection.cs
- BufferedGraphicsContext.cs
- FlowDocument.cs
- RubberbandSelector.cs
- SID.cs
- StandardBindingReliableSessionElement.cs
- DynamicPropertyReader.cs
- ToolBarDesigner.cs
- InputScopeNameConverter.cs
- XPathNodePointer.cs
- DataGridRowsPresenter.cs
- MeasureItemEvent.cs
- MetadataArtifactLoaderResource.cs
- TypeSystem.cs
- RequestQueue.cs
- LocalValueEnumerator.cs
- ConfigXmlSignificantWhitespace.cs
- UnmanagedBitmapWrapper.cs
- CodeGen.cs
- DispatcherTimer.cs
- RegisteredScript.cs
- DataServiceHostFactory.cs
- AddingNewEventArgs.cs
- HelpPage.cs
- GeneralTransform3DTo2DTo3D.cs
- SiteMapProvider.cs
- KeyValuePairs.cs
- HeaderCollection.cs
- RealProxy.cs
- UnsafeNativeMethodsMilCoreApi.cs
- SchemaLookupTable.cs
- DataServiceQueryOfT.cs
- VectorCollection.cs
- StrokeCollection2.cs
- MessageQueuePermission.cs
- DeadCharTextComposition.cs
- IdnElement.cs