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
- ToggleProviderWrapper.cs
- RegexRunnerFactory.cs
- DependencyPropertyKind.cs
- MetadataExporter.cs
- SubclassTypeValidator.cs
- LicenseManager.cs
- RepeaterItemEventArgs.cs
- OdbcCommandBuilder.cs
- DataGridViewDataConnection.cs
- MetadataPropertyCollection.cs
- OdbcPermission.cs
- ThreadLocal.cs
- Interop.cs
- Rotation3DKeyFrameCollection.cs
- CodeGeneratorAttribute.cs
- HtmlContainerControl.cs
- DispatcherFrame.cs
- Vector3DCollection.cs
- ToolboxDataAttribute.cs
- ExtensionFile.cs
- RectangleHotSpot.cs
- ButtonAutomationPeer.cs
- ModuleBuilder.cs
- CompositeScriptReference.cs
- TraceHwndHost.cs
- XPathAncestorQuery.cs
- NameValueConfigurationCollection.cs
- OdbcCommand.cs
- DocumentOrderComparer.cs
- ParserOptions.cs
- AttributeQuery.cs
- CallId.cs
- Stack.cs
- TagPrefixCollection.cs
- CaseExpr.cs
- CheckBoxDesigner.cs
- RectConverter.cs
- BitFlagsGenerator.cs
- MatrixAnimationUsingPath.cs
- TargetParameterCountException.cs
- BreadCrumbTextConverter.cs
- UnsafeNativeMethods.cs
- PeerSecurityManager.cs
- SafeSystemMetrics.cs
- PolyQuadraticBezierSegment.cs
- Condition.cs
- BuildManager.cs
- CreatingCookieEventArgs.cs
- ProfileProvider.cs
- WizardStepCollectionEditor.cs
- JpegBitmapEncoder.cs
- ActiveXHost.cs
- ConnectionPoint.cs
- TypeResolver.cs
- IndexOutOfRangeException.cs
- MenuCommandsChangedEventArgs.cs
- RunWorkerCompletedEventArgs.cs
- IncomingWebRequestContext.cs
- PenThreadPool.cs
- PolicyStatement.cs
- XmlHierarchicalDataSourceView.cs
- RenderCapability.cs
- WebSysDisplayNameAttribute.cs
- ListViewGroupConverter.cs
- SecurityVerifiedMessage.cs
- KeySpline.cs
- AddressAccessDeniedException.cs
- SelectedCellsCollection.cs
- CodeLabeledStatement.cs
- SimpleApplicationHost.cs
- DocumentEventArgs.cs
- DispatcherExceptionEventArgs.cs
- ViewValidator.cs
- LockCookie.cs
- WindowAutomationPeer.cs
- HandlerMappingMemo.cs
- ByteKeyFrameCollection.cs
- DataColumnCollection.cs
- WebPartPersonalization.cs
- ProcessHostMapPath.cs
- WebCategoryAttribute.cs
- TrustManager.cs
- StoreItemCollection.cs
- CapacityStreamGeometryContext.cs
- MessageSecurityTokenVersion.cs
- EmptyReadOnlyDictionaryInternal.cs
- processwaithandle.cs
- _LazyAsyncResult.cs
- WebPartRestoreVerb.cs
- ChangeNode.cs
- BitmapScalingModeValidation.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- ValueSerializer.cs
- SmtpLoginAuthenticationModule.cs
- AsymmetricSignatureDeformatter.cs
- AlignmentXValidation.cs
- DbConnectionPoolIdentity.cs
- DiscoveryClientChannelFactory.cs
- InputLanguageManager.cs
- CompoundFileStreamReference.cs