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
- FileVersionInfo.cs
- RegexStringValidator.cs
- NameTable.cs
- SplitterCancelEvent.cs
- EntityTypeBase.cs
- EncryptedHeaderXml.cs
- DataGridViewColumnTypeEditor.cs
- InputProcessorProfiles.cs
- GlyphTypeface.cs
- NumberFormatInfo.cs
- XamlFilter.cs
- LockRenewalTask.cs
- EventWaitHandleSecurity.cs
- BindingExpressionUncommonField.cs
- PagerSettings.cs
- DataContractSerializerServiceBehavior.cs
- SizeAnimationBase.cs
- WrapperSecurityCommunicationObject.cs
- OrderByQueryOptionExpression.cs
- InvalidOperationException.cs
- AtomServiceDocumentSerializer.cs
- ErrorItem.cs
- StylesEditorDialog.cs
- EventDescriptor.cs
- Span.cs
- SkinBuilder.cs
- ProvideValueServiceProvider.cs
- EventMap.cs
- WsdlInspector.cs
- OutputCacheSettings.cs
- TrackingDataItem.cs
- RootProfilePropertySettingsCollection.cs
- BindingContext.cs
- HttpCapabilitiesEvaluator.cs
- SchemaElement.cs
- ConstraintStruct.cs
- XmlWriterSettings.cs
- ToolStripManager.cs
- CodeIterationStatement.cs
- WebBrowserProgressChangedEventHandler.cs
- ImageSource.cs
- ShutDownListener.cs
- SingleSelectRootGridEntry.cs
- HtmlInputRadioButton.cs
- TextEndOfParagraph.cs
- TimeSpanFormat.cs
- TrackingMemoryStreamFactory.cs
- WindowsRebar.cs
- RegexRunnerFactory.cs
- WebPermission.cs
- TextureBrush.cs
- Properties.cs
- SaveRecipientRequest.cs
- ListItemViewControl.cs
- ImageMap.cs
- COMException.cs
- ObjectListCommandCollection.cs
- TrackingExtract.cs
- TextEffect.cs
- SystemNetHelpers.cs
- BitmapEffect.cs
- ResourceDescriptionAttribute.cs
- WorkflowApplication.cs
- SafeProcessHandle.cs
- ObjectDataSourceFilteringEventArgs.cs
- WebSysDefaultValueAttribute.cs
- DebugView.cs
- NotCondition.cs
- DbConnectionPoolCounters.cs
- ChangeNode.cs
- ListBoxDesigner.cs
- RichTextBoxAutomationPeer.cs
- VersionValidator.cs
- SaveFileDialogDesigner.cs
- X509ThumbprintKeyIdentifierClause.cs
- PersonalizableTypeEntry.cs
- ToolBar.cs
- SmtpCommands.cs
- ManipulationLogic.cs
- ConstraintStruct.cs
- EDesignUtil.cs
- DataGridPageChangedEventArgs.cs
- TextFormatterContext.cs
- BitmapMetadataEnumerator.cs
- ObjectParameter.cs
- XmlObjectSerializerContext.cs
- XmlNullResolver.cs
- DataGridViewComboBoxCell.cs
- ContentTextAutomationPeer.cs
- UrlPropertyAttribute.cs
- XmlSchemaSimpleTypeRestriction.cs
- MoveSizeWinEventHandler.cs
- CompilerScope.cs
- PreservationFileWriter.cs
- Label.cs
- ScriptRegistrationManager.cs
- XmlSubtreeReader.cs
- MultipleViewProviderWrapper.cs
- XmlC14NWriter.cs
- MetadataSerializer.cs