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
- BufferModesCollection.cs
- EventMap.cs
- HwndStylusInputProvider.cs
- FrameworkElementAutomationPeer.cs
- NativeCppClassAttribute.cs
- DataTableCollection.cs
- GradientBrush.cs
- VisualBasicValue.cs
- TemplateControlParser.cs
- OleDbPermission.cs
- CurrentChangingEventManager.cs
- TextElement.cs
- ImageSourceValueSerializer.cs
- ClientBuildManager.cs
- CellConstant.cs
- InvokeProviderWrapper.cs
- MetadataCache.cs
- OrthographicCamera.cs
- BrowserCapabilitiesFactoryBase.cs
- AsyncStreamReader.cs
- StrongNameUtility.cs
- GenericRootAutomationPeer.cs
- Accessible.cs
- Single.cs
- NullReferenceException.cs
- BuildProvidersCompiler.cs
- ToolBarButton.cs
- FlowLayout.cs
- RequestValidator.cs
- Point3DValueSerializer.cs
- Help.cs
- Separator.cs
- CodeExpressionCollection.cs
- RawKeyboardInputReport.cs
- DataTemplate.cs
- ListSortDescriptionCollection.cs
- ImageIndexConverter.cs
- BamlVersionHeader.cs
- FontUnitConverter.cs
- WebAdminConfigurationHelper.cs
- ScaleTransform.cs
- DecodeHelper.cs
- CounterSetInstance.cs
- HostProtectionPermission.cs
- ToolStripDesignerAvailabilityAttribute.cs
- WorkflowInstanceExtensionManager.cs
- XmlDeclaration.cs
- ConstructorArgumentAttribute.cs
- MimeTypeAttribute.cs
- OdbcErrorCollection.cs
- Expression.cs
- ExtendedPropertyInfo.cs
- DesigntimeLicenseContext.cs
- PointConverter.cs
- ActivityDesigner.cs
- BufferAllocator.cs
- ConfigurationException.cs
- RowUpdatedEventArgs.cs
- QilTernary.cs
- IntegerValidatorAttribute.cs
- ActivityExecutorDelegateInfo.cs
- GuidelineCollection.cs
- ADMembershipProvider.cs
- AppLevelCompilationSectionCache.cs
- X509ChainElement.cs
- ClosableStream.cs
- PropVariant.cs
- ManageRequest.cs
- ResourcesChangeInfo.cs
- FreezableOperations.cs
- RegularExpressionValidator.cs
- GlyphTypeface.cs
- Accessible.cs
- DbBuffer.cs
- HijriCalendar.cs
- SortedList.cs
- IndexerHelper.cs
- FlagsAttribute.cs
- EntityDataSourceValidationException.cs
- DropShadowEffect.cs
- Metadata.cs
- MemberMemberBinding.cs
- Buffer.cs
- WebServiceParameterData.cs
- SQLDouble.cs
- PrintDialogException.cs
- mediapermission.cs
- TemplateColumn.cs
- activationcontext.cs
- ReturnValue.cs
- StreamGeometry.cs
- BlockUIContainer.cs
- SynchronizationContext.cs
- FontUnit.cs
- IsolatedStorage.cs
- WebHttpSecurity.cs
- XmlUnspecifiedAttribute.cs
- EntityDataReader.cs
- CodeStatementCollection.cs
- StringCollection.cs