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
- PropertyDescriptorGridEntry.cs
- messageonlyhwndwrapper.cs
- SupportsEventValidationAttribute.cs
- KeyValuePairs.cs
- ClientUtils.cs
- BoundPropertyEntry.cs
- ObjectAnimationBase.cs
- TextEditor.cs
- ConfigurationManagerHelper.cs
- DataBindingHandlerAttribute.cs
- MgmtResManager.cs
- SqlLiftWhereClauses.cs
- XmlExpressionDumper.cs
- ValueOfAction.cs
- FormatConvertedBitmap.cs
- ReflectEventDescriptor.cs
- followingquery.cs
- DesignTimeVisibleAttribute.cs
- DocumentOrderComparer.cs
- ResourceProviderFactory.cs
- Font.cs
- CodeGroup.cs
- EntityDataSourceDesigner.cs
- TextEditorMouse.cs
- KeyNotFoundException.cs
- TrackingMemoryStreamFactory.cs
- FormClosingEvent.cs
- CorrelationKeyCalculator.cs
- TimeSpan.cs
- WindowsGraphicsCacheManager.cs
- Binding.cs
- WindowsSecurityTokenAuthenticator.cs
- WebPartsPersonalizationAuthorization.cs
- LayoutTableCell.cs
- InvokeMemberBinder.cs
- WebServiceErrorEvent.cs
- TaiwanCalendar.cs
- UrlAuthorizationModule.cs
- ListViewDataItem.cs
- Translator.cs
- ColumnHeaderConverter.cs
- Rotation3DKeyFrameCollection.cs
- SessionSwitchEventArgs.cs
- DataGridViewCellLinkedList.cs
- WizardStepBase.cs
- SQLDoubleStorage.cs
- XmlDocument.cs
- DeclaredTypeElement.cs
- GeneralTransformCollection.cs
- DesignerActionPropertyItem.cs
- EnumValAlphaComparer.cs
- ExpressionPrefixAttribute.cs
- PromptEventArgs.cs
- XmlConvert.cs
- CorrelationManager.cs
- Decoder.cs
- HGlobalSafeHandle.cs
- XmlDataLoader.cs
- QuaternionAnimation.cs
- _UriTypeConverter.cs
- OutputCacheProfile.cs
- WindowsRegion.cs
- ToolStripTextBox.cs
- BasicKeyConstraint.cs
- ImageAttributes.cs
- QueryCacheEntry.cs
- ObjectListSelectEventArgs.cs
- FilteredAttributeCollection.cs
- AssociationSetEnd.cs
- NotConverter.cs
- TextContainer.cs
- ButtonStandardAdapter.cs
- InputScopeManager.cs
- WebPartUtil.cs
- ReferencedCollectionType.cs
- UpWmlMobileTextWriter.cs
- TextHidden.cs
- BorderGapMaskConverter.cs
- BlurBitmapEffect.cs
- GroupBoxRenderer.cs
- ObjectIDGenerator.cs
- HiddenField.cs
- TextTreeExtractElementUndoUnit.cs
- DnsPermission.cs
- Membership.cs
- ByteAnimation.cs
- Accessors.cs
- RuntimeTransactionHandle.cs
- CodeDomLoader.cs
- HierarchicalDataTemplate.cs
- TypeGeneratedEventArgs.cs
- FamilyCollection.cs
- BitmapEffect.cs
- XamlWrappingReader.cs
- ObjectDataSourceChooseMethodsPanel.cs
- SelfIssuedSamlTokenFactory.cs
- TimeSpan.cs
- Pens.cs
- DurationConverter.cs
- OuterGlowBitmapEffect.cs