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
- SessionStateModule.cs
- HttpDebugHandler.cs
- UnsafePeerToPeerMethods.cs
- MetaColumn.cs
- XPathParser.cs
- ManagementOptions.cs
- DataGridViewDataErrorEventArgs.cs
- MaterialCollection.cs
- MetadataArtifactLoaderCompositeFile.cs
- GroupItemAutomationPeer.cs
- WebEventTraceProvider.cs
- SQLResource.cs
- QuaternionAnimation.cs
- ConsoleTraceListener.cs
- ZoneLinkButton.cs
- EventMappingSettings.cs
- Token.cs
- WriteLineDesigner.xaml.cs
- ToolStripContentPanel.cs
- Inflater.cs
- SqlUdtInfo.cs
- CodeCastExpression.cs
- RowVisual.cs
- CreateUserErrorEventArgs.cs
- regiisutil.cs
- DrawToolTipEventArgs.cs
- EdmSchemaAttribute.cs
- PropertySourceInfo.cs
- ObjectDisposedException.cs
- TextEditorCharacters.cs
- PersonalizableAttribute.cs
- Int32Rect.cs
- AuthorizationRuleCollection.cs
- XmlSiteMapProvider.cs
- FixedTextSelectionProcessor.cs
- CodeStatementCollection.cs
- GraphicsPathIterator.cs
- ToolStripItemTextRenderEventArgs.cs
- UniformGrid.cs
- WorkflowIdleBehavior.cs
- FixedTextPointer.cs
- SimpleWebHandlerParser.cs
- SessionState.cs
- CodeAssignStatement.cs
- View.cs
- RegexCaptureCollection.cs
- IChannel.cs
- HashCodeCombiner.cs
- UInt32.cs
- SurrogateChar.cs
- PropertyMetadata.cs
- MimeBasePart.cs
- Partitioner.cs
- DecoderBestFitFallback.cs
- CodeAccessSecurityEngine.cs
- SimpleBitVector32.cs
- BindableAttribute.cs
- WebPartsPersonalizationAuthorization.cs
- ObjectCloneHelper.cs
- SiteOfOriginContainer.cs
- Timer.cs
- Object.cs
- ToolStripDesignerAvailabilityAttribute.cs
- XmlEnumAttribute.cs
- AsyncInvokeContext.cs
- SystemDiagnosticsSection.cs
- InputScopeConverter.cs
- AnonymousIdentificationModule.cs
- DesignerDataParameter.cs
- AssemblyNameProxy.cs
- TriggerCollection.cs
- ArrayMergeHelper.cs
- Helper.cs
- MappingModelBuildProvider.cs
- Convert.cs
- ByteConverter.cs
- NativeMethods.cs
- HostingEnvironment.cs
- MailWebEventProvider.cs
- ImportedPolicyConversionContext.cs
- WorkflowInvoker.cs
- EntityWrapper.cs
- ToolStripDropDownClosingEventArgs.cs
- DockProviderWrapper.cs
- RemotingAttributes.cs
- GenericWebPart.cs
- SessionViewState.cs
- CodeGenerator.cs
- StylusPointCollection.cs
- EpmSyndicationContentSerializer.cs
- CipherData.cs
- TemplateParser.cs
- LazyTextWriterCreator.cs
- WindowsEditBoxRange.cs
- PropVariant.cs
- MessageAction.cs
- webeventbuffer.cs
- ProcessThread.cs
- UnmanagedMemoryStream.cs
- EventSinkHelperWriter.cs