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
- UnsafeNativeMethods.cs
- odbcmetadatafactory.cs
- Transactions.cs
- IResourceProvider.cs
- SqlExpressionNullability.cs
- SqlDataSourceCache.cs
- DataPagerFieldCommandEventArgs.cs
- FixedElement.cs
- MarshalByRefObject.cs
- DecoderFallbackWithFailureFlag.cs
- DataGridRowHeaderAutomationPeer.cs
- ElementsClipboardData.cs
- ComponentRenameEvent.cs
- SqlError.cs
- ShaderRenderModeValidation.cs
- NullableConverter.cs
- XmlDomTextWriter.cs
- ContextStaticAttribute.cs
- ProfileParameter.cs
- ErrorInfoXmlDocument.cs
- Rotation3DAnimationUsingKeyFrames.cs
- ECDiffieHellmanPublicKey.cs
- ClientBuildManagerCallback.cs
- TextViewSelectionProcessor.cs
- PeerContact.cs
- X509WindowsSecurityToken.cs
- ComboBox.cs
- ContactManager.cs
- OleAutBinder.cs
- PersonalizationAdministration.cs
- Membership.cs
- DataSourceView.cs
- StylusPointPropertyInfoDefaults.cs
- wgx_exports.cs
- AttachedPropertyBrowsableAttribute.cs
- ColumnClickEvent.cs
- CodeIdentifiers.cs
- AxHost.cs
- WindowsIdentity.cs
- mediapermission.cs
- ContextBase.cs
- Baml6ConstructorInfo.cs
- XmlSchemaAnnotated.cs
- Themes.cs
- Size3D.cs
- ConstrainedDataObject.cs
- ResXDataNode.cs
- SecuritySessionSecurityTokenAuthenticator.cs
- HttpResponseHeader.cs
- Stroke2.cs
- AnimationClockResource.cs
- DelegateSerializationHolder.cs
- TrackBar.cs
- ActivityValidator.cs
- TagElement.cs
- SelectionEditingBehavior.cs
- ConvertersCollection.cs
- FunctionDetailsReader.cs
- HuffCodec.cs
- UIElement3D.cs
- ScanQueryOperator.cs
- ToolStripDropDown.cs
- ListControl.cs
- SemaphoreFullException.cs
- AsymmetricAlgorithm.cs
- ExpressionBuilderContext.cs
- TypeUtil.cs
- SerializableReadOnlyDictionary.cs
- CallContext.cs
- DataKey.cs
- MenuItem.cs
- CustomAttribute.cs
- InkCanvasInnerCanvas.cs
- EllipseGeometry.cs
- CreatingCookieEventArgs.cs
- DataTableClearEvent.cs
- XmlChildEnumerator.cs
- CorrelationQueryBehavior.cs
- XDeferredAxisSource.cs
- StrokeNodeOperations2.cs
- EditorAttribute.cs
- SimpleBitVector32.cs
- CollectionsUtil.cs
- ErrorActivity.cs
- ScalarConstant.cs
- XsdBuildProvider.cs
- BinaryMethodMessage.cs
- HtmlFormParameterWriter.cs
- PathData.cs
- XmlTextReader.cs
- DataList.cs
- ProjectedSlot.cs
- QueryCacheEntry.cs
- Int32Animation.cs
- GestureRecognizer.cs
- GatewayDefinition.cs
- base64Transforms.cs
- QualificationDataItem.cs
- ClickablePoint.cs
- ClientBuildManager.cs