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
- PeerNameRecordCollection.cs
- SQLCharsStorage.cs
- OrthographicCamera.cs
- SingleConverter.cs
- UriSection.cs
- COM2FontConverter.cs
- Point3D.cs
- UserControlFileEditor.cs
- LostFocusEventManager.cs
- XmlAttributes.cs
- FileInfo.cs
- NullableBoolConverter.cs
- RegistryPermission.cs
- IntegrationExceptionEventArgs.cs
- StreamHelper.cs
- TrackingLocation.cs
- EasingKeyFrames.cs
- TextTreeExtractElementUndoUnit.cs
- OSFeature.cs
- WmlLinkAdapter.cs
- Util.cs
- ProjectionPathBuilder.cs
- GridItem.cs
- RequestTimeoutManager.cs
- UrlAuthorizationModule.cs
- XhtmlConformanceSection.cs
- Token.cs
- RootBrowserWindow.cs
- DataTablePropertyDescriptor.cs
- SchemaSetCompiler.cs
- LockedAssemblyCache.cs
- AxisAngleRotation3D.cs
- BuildManager.cs
- TemplateManager.cs
- XhtmlTextWriter.cs
- ToggleProviderWrapper.cs
- DataGridViewColumnEventArgs.cs
- Debug.cs
- ObjRef.cs
- DelegateSerializationHolder.cs
- RegisterResponseInfo.cs
- ParameterDataSourceExpression.cs
- WmfPlaceableFileHeader.cs
- ThreadInterruptedException.cs
- ServiceModelExtensionElement.cs
- ReflectionTypeLoadException.cs
- TabPage.cs
- GeometryHitTestParameters.cs
- SvcFileManager.cs
- TextFormatterImp.cs
- ScaleTransform.cs
- DataGridColumnsPage.cs
- IgnoreSectionHandler.cs
- OpenTypeLayoutCache.cs
- Scheduling.cs
- StandardRuntimeEnumValidator.cs
- TableLayoutSettingsTypeConverter.cs
- CookieParameter.cs
- OutOfProcStateClientManager.cs
- XmlIgnoreAttribute.cs
- DoubleLinkList.cs
- EventLog.cs
- VerifyHashRequest.cs
- StringConverter.cs
- DesignerSerializationOptionsAttribute.cs
- RedistVersionInfo.cs
- Timeline.cs
- RadioButton.cs
- NativeCppClassAttribute.cs
- BCryptHashAlgorithm.cs
- TableLayoutRowStyleCollection.cs
- XmlSchemaGroupRef.cs
- ThicknessAnimationBase.cs
- Vector3D.cs
- PartitionedStream.cs
- ValueTypeFixupInfo.cs
- RegistryPermission.cs
- TextBlock.cs
- DataGridViewCellValidatingEventArgs.cs
- Translator.cs
- MsmqNonTransactedPoisonHandler.cs
- ValueChangedEventManager.cs
- WindowsAuthenticationEventArgs.cs
- Memoizer.cs
- UIntPtr.cs
- ManagementEventArgs.cs
- TypeDelegator.cs
- WebPartConnectionsConnectVerb.cs
- recordstate.cs
- XmlEventCache.cs
- CornerRadiusConverter.cs
- WorkflowQueueInfo.cs
- ListControl.cs
- PersianCalendar.cs
- InvalidCastException.cs
- QueryOutputWriter.cs
- AttributeQuery.cs
- SolidColorBrush.cs
- Message.cs
- HttpHandlerAction.cs