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
- UInt16.cs
- InkCanvasSelection.cs
- PLINQETWProvider.cs
- KeyProperty.cs
- TemplatePartAttribute.cs
- XmlSchemaAnyAttribute.cs
- DictionaryChange.cs
- Sequence.cs
- PatternMatcher.cs
- MapPathBasedVirtualPathProvider.cs
- InputScopeManager.cs
- UnmanagedMarshal.cs
- ColorInterpolationModeValidation.cs
- GradientBrush.cs
- Util.cs
- SymbolPair.cs
- ParentUndoUnit.cs
- ScriptResourceAttribute.cs
- TokenFactoryFactory.cs
- ReflectEventDescriptor.cs
- DoubleAnimationBase.cs
- BrushConverter.cs
- XmlObjectSerializerWriteContextComplexJson.cs
- AspNetSynchronizationContext.cs
- Attributes.cs
- SerialErrors.cs
- LogicalExpr.cs
- OleServicesContext.cs
- ZipFileInfoCollection.cs
- SafeNativeMethods.cs
- MessageBox.cs
- EnvelopedSignatureTransform.cs
- _SSPIWrapper.cs
- SafeCertificateContext.cs
- HostUtils.cs
- TargetConverter.cs
- WebConvert.cs
- WindowsPrincipal.cs
- XslCompiledTransform.cs
- MbpInfo.cs
- securitycriticaldataClass.cs
- TypeUtil.cs
- EraserBehavior.cs
- CodeSpit.cs
- Component.cs
- InternalBase.cs
- Debug.cs
- ParagraphVisual.cs
- FastEncoderStatics.cs
- ConfigurationManagerHelperFactory.cs
- UIElementPropertyUndoUnit.cs
- ContextMenu.cs
- StrokeNodeOperations.cs
- XmlChoiceIdentifierAttribute.cs
- Avt.cs
- NonBatchDirectoryCompiler.cs
- QueryReaderSettings.cs
- Matrix.cs
- WsatTransactionInfo.cs
- LabelExpression.cs
- NameValueConfigurationCollection.cs
- DataGridViewButtonCell.cs
- DataDocumentXPathNavigator.cs
- MessageQueuePermissionEntry.cs
- XmlSerializerOperationBehavior.cs
- InsufficientMemoryException.cs
- UnmanagedMarshal.cs
- ResourcesGenerator.cs
- List.cs
- RouteItem.cs
- DataSourceGeneratorException.cs
- NamespaceEmitter.cs
- GlyphShapingProperties.cs
- SqlMethodTransformer.cs
- CodeArrayCreateExpression.cs
- LineSegment.cs
- DataBindEngine.cs
- ActiveXContainer.cs
- CaseInsensitiveOrdinalStringComparer.cs
- TextParagraph.cs
- DefaultTextStore.cs
- SignedXmlDebugLog.cs
- AuthenticationConfig.cs
- LogicalChannel.cs
- unsafenativemethodsother.cs
- EmbeddedMailObject.cs
- ContextMarshalException.cs
- HealthMonitoringSection.cs
- WebRequestModuleElement.cs
- SimpleBitVector32.cs
- X509PeerCertificateAuthenticationElement.cs
- GlobalizationAssembly.cs
- HotSpot.cs
- D3DImage.cs
- PolyQuadraticBezierSegment.cs
- WindowsEditBoxRange.cs
- Wildcard.cs
- BitmapData.cs
- LabelDesigner.cs
- MenuItemAutomationPeer.cs