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
- RegexCompilationInfo.cs
- FixedFlowMap.cs
- CollectionAdapters.cs
- Polyline.cs
- RecipientInfo.cs
- ColorContext.cs
- AutomationElement.cs
- GroupItemAutomationPeer.cs
- IntSecurity.cs
- XappLauncher.cs
- WindowsGraphics.cs
- QueryUtil.cs
- TempEnvironment.cs
- ItemsChangedEventArgs.cs
- XmlEncoding.cs
- SmtpDigestAuthenticationModule.cs
- ControlUtil.cs
- IntPtr.cs
- CategoryGridEntry.cs
- DesignerOptions.cs
- StatementContext.cs
- TrackingProfileCache.cs
- PeerCollaboration.cs
- ComponentResourceKeyConverter.cs
- HtmlInputControl.cs
- OutputCacheModule.cs
- MatrixAnimationUsingPath.cs
- ArrangedElement.cs
- _BufferOffsetSize.cs
- __Filters.cs
- InputManager.cs
- TextLineBreak.cs
- BitmapCodecInfoInternal.cs
- MultiBindingExpression.cs
- CodeAccessPermission.cs
- ZipIOExtraFieldZip64Element.cs
- DataGridViewRowsRemovedEventArgs.cs
- TableLayoutSettings.cs
- DrawingBrush.cs
- FileRegion.cs
- BaseProcessor.cs
- LineInfo.cs
- ConfigurationManager.cs
- FormViewInsertedEventArgs.cs
- BaseDataBoundControlDesigner.cs
- XmlUrlResolver.cs
- GridLength.cs
- AncillaryOps.cs
- ImageConverter.cs
- AbsoluteQuery.cs
- HyperLinkStyle.cs
- ResourceExpressionEditorSheet.cs
- HttpWebRequest.cs
- AutomationAttributeInfo.cs
- CompiledQuery.cs
- EdmItemError.cs
- EnglishPluralizationService.cs
- NullableConverter.cs
- InternalsVisibleToAttribute.cs
- TypeForwardedToAttribute.cs
- ExpressionReplacer.cs
- LoginName.cs
- CommandValueSerializer.cs
- InputChannelAcceptor.cs
- DebugViewWriter.cs
- FaultHandlingFilter.cs
- StyleSelector.cs
- SiteOfOriginContainer.cs
- CodeDelegateCreateExpression.cs
- MasterPage.cs
- TagMapInfo.cs
- MenuAdapter.cs
- LogEntryHeaderDeserializer.cs
- _NTAuthentication.cs
- UnmanagedMarshal.cs
- StorageModelBuildProvider.cs
- StylusCollection.cs
- GridViewSortEventArgs.cs
- DSASignatureFormatter.cs
- ThreadBehavior.cs
- DbProviderFactory.cs
- WsdlContractConversionContext.cs
- KeySplineConverter.cs
- SchemaImporterExtension.cs
- ApplicationFileParser.cs
- AssemblySettingAttributes.cs
- IUnknownConstantAttribute.cs
- Image.cs
- UnconditionalPolicy.cs
- QueryContinueDragEventArgs.cs
- TableParaClient.cs
- IncrementalReadDecoders.cs
- CurrentChangingEventManager.cs
- ServiceNameCollection.cs
- SerializationSectionGroup.cs
- RemotingConfigParser.cs
- MemberInfoSerializationHolder.cs
- TerminatorSinks.cs
- HebrewNumber.cs
- LogicalExpr.cs