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
- OdbcInfoMessageEvent.cs
- IDReferencePropertyAttribute.cs
- ExpanderAutomationPeer.cs
- ComponentEditorPage.cs
- NavigationWindowAutomationPeer.cs
- OleDbPermission.cs
- StrokeNodeOperations.cs
- TcpChannelFactory.cs
- CommandID.cs
- TypeDescriptor.cs
- LongTypeConverter.cs
- SoundPlayer.cs
- CrossSiteScriptingValidation.cs
- LocalBuilder.cs
- DataGridViewRowStateChangedEventArgs.cs
- DisplayNameAttribute.cs
- XPathParser.cs
- TableDetailsCollection.cs
- FieldValue.cs
- WebEventCodes.cs
- XmlDataSourceNodeDescriptor.cs
- AggregateNode.cs
- HelpFileFileNameEditor.cs
- Memoizer.cs
- CommonObjectSecurity.cs
- _SafeNetHandles.cs
- BeginEvent.cs
- WorkflowDesigner.cs
- FormatConvertedBitmap.cs
- FlowNode.cs
- DocumentSchemaValidator.cs
- VectorValueSerializer.cs
- EnvelopedSignatureTransform.cs
- GridViewItemAutomationPeer.cs
- HwndStylusInputProvider.cs
- BCLDebug.cs
- AppSettingsReader.cs
- AdornerPresentationContext.cs
- PartialList.cs
- Highlights.cs
- BindValidationContext.cs
- FlowNode.cs
- CommandDevice.cs
- ComboBox.cs
- CodeDOMUtility.cs
- AdapterDictionary.cs
- StreamInfo.cs
- PeerContact.cs
- InitiatorSessionSymmetricTransportSecurityProtocol.cs
- XhtmlConformanceSection.cs
- XamlSerializationHelper.cs
- WebPartTracker.cs
- GridViewPageEventArgs.cs
- EntityCodeGenerator.cs
- XmlAnyAttributeAttribute.cs
- ImageDrawing.cs
- DataBindingCollectionConverter.cs
- IfAction.cs
- ElementNotEnabledException.cs
- figurelengthconverter.cs
- DataGridViewComboBoxEditingControl.cs
- ColumnWidthChangedEvent.cs
- Vector3DAnimationUsingKeyFrames.cs
- ClrProviderManifest.cs
- ObjectTag.cs
- AnimationClockResource.cs
- wgx_sdk_version.cs
- TailCallAnalyzer.cs
- ObjectDataSourceStatusEventArgs.cs
- ConnectionStringsExpressionBuilder.cs
- WebPartRestoreVerb.cs
- ApplicationTrust.cs
- FontStretchConverter.cs
- ObjectKeyFrameCollection.cs
- ProcessHost.cs
- AbstractSvcMapFileLoader.cs
- JoinTreeSlot.cs
- ProcessThread.cs
- TypeCacheManager.cs
- ProfileGroupSettings.cs
- SmiXetterAccessMap.cs
- MonthCalendar.cs
- SecurityIdentifierConverter.cs
- LogicalExpressionEditor.cs
- ProtocolException.cs
- xdrvalidator.cs
- TextRenderer.cs
- Pointer.cs
- TextEffect.cs
- RenderData.cs
- DocComment.cs
- StorageScalarPropertyMapping.cs
- WinCategoryAttribute.cs
- InfoCardRSAPKCS1SignatureFormatter.cs
- WebPartDisplayMode.cs
- DataControlPagerLinkButton.cs
- ExtensionFile.cs
- WSDualHttpBindingElement.cs
- Control.cs
- FileLoadException.cs