Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ScopelessEnumAttribute.cs
- DrawingContext.cs
- DBConcurrencyException.cs
- DnsElement.cs
- OciLobLocator.cs
- GroupStyle.cs
- Point3DCollection.cs
- SqlCachedBuffer.cs
- DataBoundControl.cs
- ListBoxItemAutomationPeer.cs
- ExecutedRoutedEventArgs.cs
- DbMetaDataCollectionNames.cs
- FigureParaClient.cs
- LinearGradientBrush.cs
- MenuTracker.cs
- PenThreadWorker.cs
- AutomationPatternInfo.cs
- relpropertyhelper.cs
- TagElement.cs
- DeploymentExceptionMapper.cs
- PieceNameHelper.cs
- DecoratedNameAttribute.cs
- PanelContainerDesigner.cs
- WebPartVerbCollection.cs
- KeyGesture.cs
- LineSegment.cs
- FunctionQuery.cs
- RelationshipNavigation.cs
- TableRowCollection.cs
- CmsInterop.cs
- PropertyGridDesigner.cs
- PropertyGridView.cs
- ObjectDataSourceMethodEditor.cs
- BufferedStream.cs
- WebPartConnectionsConfigureVerb.cs
- SoapSchemaMember.cs
- HashHelper.cs
- HeaderCollection.cs
- FormCollection.cs
- DataList.cs
- TransformValueSerializer.cs
- Point3DAnimationBase.cs
- MsmqQueue.cs
- PropertyFilterAttribute.cs
- RuntimeWrappedException.cs
- NativeCppClassAttribute.cs
- PathSegmentCollection.cs
- AudioException.cs
- WebControlToolBoxItem.cs
- WSFederationHttpBindingElement.cs
- Permission.cs
- Cloud.cs
- PeerContact.cs
- DnsElement.cs
- ScrollItemPattern.cs
- FixedPageAutomationPeer.cs
- Object.cs
- SelectorItemAutomationPeer.cs
- BlockUIContainer.cs
- SmtpReplyReader.cs
- IPipelineRuntime.cs
- TransactionFlowAttribute.cs
- SubMenuStyleCollection.cs
- GeneralTransformGroup.cs
- Blend.cs
- BrushMappingModeValidation.cs
- KeySplineConverter.cs
- ProfileGroupSettings.cs
- ImagingCache.cs
- UnsafeNativeMethods.cs
- FrameworkTextComposition.cs
- SchemaImporterExtensionElement.cs
- OleServicesContext.cs
- InfoCardRequestException.cs
- ZoomPercentageConverter.cs
- ExceptionHandlersDesigner.cs
- Html32TextWriter.cs
- DesignerOptionService.cs
- InvokeProviderWrapper.cs
- XmlUtil.cs
- MatrixStack.cs
- StatusBarPanel.cs
- ObjectHelper.cs
- WhitespaceRuleLookup.cs
- LicFileLicenseProvider.cs
- ProcessHostConfigUtils.cs
- LayoutTable.cs
- WmfPlaceableFileHeader.cs
- WrapPanel.cs
- MultiView.cs
- DataGridViewSortCompareEventArgs.cs
- AnnotationResourceChangedEventArgs.cs
- XmlSiteMapProvider.cs
- SoapHeaders.cs
- UmAlQuraCalendar.cs
- FileResponseElement.cs
- DataGridViewToolTip.cs
- MatrixAnimationUsingPath.cs
- Crc32.cs
- HMACSHA384.cs