Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Media / SafeMILHandleMemoryPressure.cs / 1407647 / SafeMILHandleMemoryPressure.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: // Tracks the amount of native memory used by SafeMILHandle objects. //--------------------------------------------------------------------------- using System; using System.Security; using MS.Internal; using System.Threading; namespace System.Windows.Media { internal class SafeMILHandleMemoryPressure { ////// Critical: This code calls into AddMemoryPressure which has a link demand. /// [SecurityCritical] internal SafeMILHandleMemoryPressure(long gcPressure) { _gcPressure = gcPressure; _refCount = 0; if (_gcPressure > SMALL_BITMAP_MEM) { MemoryPressure.Add(_gcPressure); } else { GC.AddMemoryPressure(_gcPressure); } } internal void AddRef() { Interlocked.Increment(ref _refCount); } ////// Critical: This code calls into RemoveMemoryPressure which has a link demand. /// [SecurityCritical] internal void Release() { if (Interlocked.Decrement(ref _refCount) == 0) { if (_gcPressure > SMALL_BITMAP_MEM) { MemoryPressure.Remove(_gcPressure); } else { GC.RemoveMemoryPressure(_gcPressure); } _gcPressure = 0; } } // Estimated size in bytes of the unmanaged memory private long _gcPressure; // // SafeMILHandleMemoryPressure does its own ref counting in managed code, because the // associated memory pressure should be removed when there are no more managed // references to the unmanaged resource. There can still be references to it from // unmanaged code elsewhere, but that should not prevent the memory pressure from being // released. // private int _refCount; // // The memory usage for a "small" bitmap // // Small bitmaps will be handled by GC.AddMemoryPressure() rather than WPF's own // MemoryPressure algorithm. GC's algorithm is less aggressive than WPF's, and will // result in fewer expensive GC.Collect(2) operations. // // For now, a small bitmap is 32x32 or less. It's at 4 bytes per pixel, and the *2 is // to account for the doubled estimate in // BitmapSourceMILSafeHandle.ComputeEstimatedSize(). // private const long SMALL_BITMAP_MEM = 32 * 32 * 4 * 2; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: // Tracks the amount of native memory used by SafeMILHandle objects. //--------------------------------------------------------------------------- using System; using System.Security; using MS.Internal; using System.Threading; namespace System.Windows.Media { internal class SafeMILHandleMemoryPressure { ////// Critical: This code calls into AddMemoryPressure which has a link demand. /// [SecurityCritical] internal SafeMILHandleMemoryPressure(long gcPressure) { _gcPressure = gcPressure; _refCount = 0; if (_gcPressure > SMALL_BITMAP_MEM) { MemoryPressure.Add(_gcPressure); } else { GC.AddMemoryPressure(_gcPressure); } } internal void AddRef() { Interlocked.Increment(ref _refCount); } ////// Critical: This code calls into RemoveMemoryPressure which has a link demand. /// [SecurityCritical] internal void Release() { if (Interlocked.Decrement(ref _refCount) == 0) { if (_gcPressure > SMALL_BITMAP_MEM) { MemoryPressure.Remove(_gcPressure); } else { GC.RemoveMemoryPressure(_gcPressure); } _gcPressure = 0; } } // Estimated size in bytes of the unmanaged memory private long _gcPressure; // // SafeMILHandleMemoryPressure does its own ref counting in managed code, because the // associated memory pressure should be removed when there are no more managed // references to the unmanaged resource. There can still be references to it from // unmanaged code elsewhere, but that should not prevent the memory pressure from being // released. // private int _refCount; // // The memory usage for a "small" bitmap // // Small bitmaps will be handled by GC.AddMemoryPressure() rather than WPF's own // MemoryPressure algorithm. GC's algorithm is less aggressive than WPF's, and will // result in fewer expensive GC.Collect(2) operations. // // For now, a small bitmap is 32x32 or less. It's at 4 bytes per pixel, and the *2 is // to account for the doubled estimate in // BitmapSourceMILSafeHandle.ComputeEstimatedSize(). // private const long SMALL_BITMAP_MEM = 32 * 32 * 4 * 2; } } // 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
- XmlNamespaceManager.cs
- GroupStyle.cs
- DataGridRow.cs
- PeerEndPoint.cs
- WriteLineDesigner.xaml.cs
- Adorner.cs
- DesignerTextBoxAdapter.cs
- QueryHandler.cs
- SupportsEventValidationAttribute.cs
- WebColorConverter.cs
- DbConnectionStringBuilder.cs
- ManualResetEvent.cs
- RegistrySecurity.cs
- EntityModelSchemaGenerator.cs
- ProtocolsConfigurationEntry.cs
- FunctionQuery.cs
- CatalogPartChrome.cs
- ParallelActivityDesigner.cs
- DefinitionUpdate.cs
- BrowserTree.cs
- CheckBoxField.cs
- SplitterPanel.cs
- JoinCqlBlock.cs
- CallbackValidator.cs
- InputEventArgs.cs
- KeyInstance.cs
- TableLayoutPanelDesigner.cs
- ParameterDataSourceExpression.cs
- DropDownButton.cs
- PropertyGeneratedEventArgs.cs
- CodeGenerator.cs
- ColorInterpolationModeValidation.cs
- XmlSchemaAttributeGroupRef.cs
- _UncName.cs
- VectorAnimationBase.cs
- SqlDataSourceStatusEventArgs.cs
- CharacterHit.cs
- InProcStateClientManager.cs
- PhysicalAddress.cs
- UserControlParser.cs
- MenuItemStyleCollection.cs
- Menu.cs
- InstancePersistenceCommandException.cs
- SerializationException.cs
- CodeStatement.cs
- recordstatescratchpad.cs
- DataSourceCache.cs
- PatternMatcher.cs
- ConsoleTraceListener.cs
- TransportSecurityProtocolFactory.cs
- SpellerHighlightLayer.cs
- WhitespaceRuleLookup.cs
- TextureBrush.cs
- CryptoStream.cs
- GlyphsSerializer.cs
- BooleanAnimationBase.cs
- TextTreeNode.cs
- filewebrequest.cs
- Attributes.cs
- HTTPNotFoundHandler.cs
- ExpressionLexer.cs
- _SslSessionsCache.cs
- SoapSchemaExporter.cs
- DbConnectionInternal.cs
- StreamingContext.cs
- RadialGradientBrush.cs
- EntityViewGenerationAttribute.cs
- HttpResponseInternalBase.cs
- XamlToRtfParser.cs
- CompiledQuery.cs
- BrowserTree.cs
- RpcCryptoRequest.cs
- Marshal.cs
- BaseTreeIterator.cs
- PageCatalogPart.cs
- ProviderConnectionPoint.cs
- ConnectionPoint.cs
- SponsorHelper.cs
- RouteUrlExpressionBuilder.cs
- translator.cs
- Tracking.cs
- GridViewCellAutomationPeer.cs
- ResourceDisplayNameAttribute.cs
- KeyInfo.cs
- CacheOutputQuery.cs
- ClientConfigurationSystem.cs
- FactoryMaker.cs
- ExpressionBuilderCollection.cs
- SBCSCodePageEncoding.cs
- NamespaceQuery.cs
- HttpWebRequest.cs
- CompositeDataBoundControl.cs
- WebHttpElement.cs
- UnicastIPAddressInformationCollection.cs
- DesignerLabelAdapter.cs
- TextBlock.cs
- StretchValidation.cs
- ObjectQueryExecutionPlan.cs
- SymLanguageVendor.cs
- DataColumnPropertyDescriptor.cs