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
- SettingsSection.cs
- Keywords.cs
- XmlSortKeyAccumulator.cs
- HttpRuntimeSection.cs
- HostingEnvironmentSection.cs
- BaseDataList.cs
- EventlogProvider.cs
- InProcStateClientManager.cs
- ExpandableObjectConverter.cs
- PixelFormats.cs
- SocketInformation.cs
- CodeTypeConstructor.cs
- TreeChangeInfo.cs
- FormsAuthenticationModule.cs
- WebPartUtil.cs
- DocumentViewerConstants.cs
- Operand.cs
- DoubleSumAggregationOperator.cs
- BulletDecorator.cs
- DSASignatureDeformatter.cs
- FieldTemplateUserControl.cs
- ItemCollection.cs
- Zone.cs
- WpfXamlMember.cs
- Point.cs
- TranslateTransform3D.cs
- RoleBoolean.cs
- CacheDependency.cs
- ShaderEffect.cs
- WebPartConnection.cs
- NumericUpDownAccelerationCollection.cs
- XmlSchemaFacet.cs
- InvalidDataException.cs
- FontWeights.cs
- EnumMember.cs
- EastAsianLunisolarCalendar.cs
- CodeGeneratorOptions.cs
- BaseTemplateCodeDomTreeGenerator.cs
- DataPagerFieldCommandEventArgs.cs
- WinFormsSpinner.cs
- XmlElementList.cs
- DataPointer.cs
- ApplicationId.cs
- Form.cs
- CellIdBoolean.cs
- SelectedDatesCollection.cs
- ServiceReference.cs
- FixedLineResult.cs
- Normalization.cs
- _SslState.cs
- Trace.cs
- IPipelineRuntime.cs
- ComponentCommands.cs
- HwndTarget.cs
- DataGridViewCellFormattingEventArgs.cs
- TaiwanCalendar.cs
- DesignerForm.cs
- NameService.cs
- TargetConverter.cs
- AnonymousIdentificationSection.cs
- SerTrace.cs
- wmiutil.cs
- Peer.cs
- FactoryRecord.cs
- RuntimeHelpers.cs
- BrowserCapabilitiesFactoryBase.cs
- UriWriter.cs
- RadioButton.cs
- UrlPath.cs
- XMLUtil.cs
- ScrollPattern.cs
- AtomMaterializerLog.cs
- CalendarButton.cs
- XmlHelper.cs
- SqlDataSourceSelectingEventArgs.cs
- CounterCreationDataCollection.cs
- RedistVersionInfo.cs
- Metadata.cs
- XsltException.cs
- DataObjectPastingEventArgs.cs
- CodeTypeReferenceExpression.cs
- EditorZoneDesigner.cs
- NamedObject.cs
- OleDbStruct.cs
- ColumnHeaderConverter.cs
- ToolboxDataAttribute.cs
- SqlDataSourceQueryEditor.cs
- XmlnsDefinitionAttribute.cs
- dataobject.cs
- FileEnumerator.cs
- DataServices.cs
- PersonalizationProviderHelper.cs
- ProcessModelSection.cs
- StackOverflowException.cs
- TextDecorationUnitValidation.cs
- BindingWorker.cs
- CodeCompileUnit.cs
- SendingRequestEventArgs.cs
- CubicEase.cs
- InterleavedZipPartStream.cs