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
- EpmContentDeSerializerBase.cs
- LiteralText.cs
- ImageIndexConverter.cs
- DeviceFilterDictionary.cs
- TrueReadOnlyCollection.cs
- InternalConfigSettingsFactory.cs
- EncoderNLS.cs
- Error.cs
- XmlIlGenerator.cs
- NamespaceCollection.cs
- SafeFileHandle.cs
- DispatcherTimer.cs
- CustomWebEventKey.cs
- DependencyObject.cs
- TransactionScope.cs
- FontFamilyConverter.cs
- DataSourceCacheDurationConverter.cs
- FaultContractAttribute.cs
- RestHandler.cs
- SchemaNames.cs
- Gdiplus.cs
- WindowsNonControl.cs
- DataGridViewCellEventArgs.cs
- ChangeTracker.cs
- OdbcConnectionHandle.cs
- ComboBox.cs
- PropertyMap.cs
- ChangeBlockUndoRecord.cs
- ContainerUIElement3D.cs
- ExtractCollection.cs
- Descriptor.cs
- ApplicationServiceHelper.cs
- MeasureData.cs
- StrokeNodeOperations.cs
- HostingEnvironmentException.cs
- ProtocolElementCollection.cs
- IsolationInterop.cs
- EventTask.cs
- Math.cs
- FormView.cs
- KnownBoxes.cs
- AdRotator.cs
- Point3DIndependentAnimationStorage.cs
- SmiRecordBuffer.cs
- WebUtil.cs
- LiteralLink.cs
- MetadataAssemblyHelper.cs
- StateBag.cs
- TrustLevelCollection.cs
- SqlDataSourceConfigureSelectPanel.cs
- IsolatedStoragePermission.cs
- AndMessageFilterTable.cs
- MoveSizeWinEventHandler.cs
- Number.cs
- TextElementEnumerator.cs
- Duration.cs
- ReaderContextStackData.cs
- CommandHelpers.cs
- TimeSpanConverter.cs
- BinaryNode.cs
- StringUtil.cs
- DbConnectionPool.cs
- Math.cs
- DataTable.cs
- Native.cs
- XmlElementCollection.cs
- DecimalKeyFrameCollection.cs
- DataControlButton.cs
- UpdateTracker.cs
- SafeTokenHandle.cs
- ComPlusTypeLoader.cs
- PageThemeBuildProvider.cs
- Model3D.cs
- CLSCompliantAttribute.cs
- BuildTopDownAttribute.cs
- SqlCacheDependencyDatabase.cs
- BaseProcessor.cs
- Quad.cs
- Adorner.cs
- DataGridColumnCollectionEditor.cs
- HostProtectionException.cs
- PropVariant.cs
- HttpConfigurationContext.cs
- RegistryDataKey.cs
- FileAuthorizationModule.cs
- TransformerInfo.cs
- NetworkCredential.cs
- _NetworkingPerfCounters.cs
- Transform.cs
- TableItemPattern.cs
- XmlSignificantWhitespace.cs
- TextProperties.cs
- PackageDocument.cs
- XmlName.cs
- SwitchLevelAttribute.cs
- Exceptions.cs
- File.cs
- CfgParser.cs
- DetailsViewPagerRow.cs
- ToolStripSplitStackLayout.cs