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
- DebugHandleTracker.cs
- GACIdentityPermission.cs
- SmiContext.cs
- StreamGeometryContext.cs
- AppendHelper.cs
- XmlDataSourceDesigner.cs
- HttpResponse.cs
- EndEvent.cs
- ListViewUpdatedEventArgs.cs
- LabelLiteral.cs
- DataFormats.cs
- TableTextElementCollectionInternal.cs
- HttpApplication.cs
- EntityViewGenerationAttribute.cs
- RegistrySecurity.cs
- BaseTemplateCodeDomTreeGenerator.cs
- OutArgument.cs
- GridToolTip.cs
- TextEmbeddedObject.cs
- ResourceAttributes.cs
- SiteMapNodeItem.cs
- SymbolDocumentGenerator.cs
- Point3DKeyFrameCollection.cs
- XmlDeclaration.cs
- ListViewAutomationPeer.cs
- AdapterUtil.cs
- HttpStaticObjectsCollectionWrapper.cs
- XsdCachingReader.cs
- InternalConfigHost.cs
- VectorAnimation.cs
- InputReferenceExpression.cs
- ElementHost.cs
- EndpointFilterProvider.cs
- TokenizerHelper.cs
- SByte.cs
- WinCategoryAttribute.cs
- BaseTemplateBuildProvider.cs
- AuthenticationException.cs
- RemotingAttributes.cs
- GlyphRun.cs
- StylusPointPropertyInfo.cs
- ContentHostHelper.cs
- HttpListenerException.cs
- RelationshipDetailsRow.cs
- SafeNativeMethods.cs
- FreeIndexList.cs
- BoolExpr.cs
- ProfileInfo.cs
- XmlBoundElement.cs
- EntityContainer.cs
- XPathMultyIterator.cs
- DataErrorValidationRule.cs
- InfoCardSymmetricAlgorithm.cs
- ExtendedProperty.cs
- SoapException.cs
- ObjectHelper.cs
- WindowsSolidBrush.cs
- TraceSwitch.cs
- HostedElements.cs
- FastEncoderStatics.cs
- PeerApplication.cs
- InvalidDataContractException.cs
- CalculatedColumn.cs
- PerformanceCounter.cs
- LiteralLink.cs
- HtmlImage.cs
- mansign.cs
- DirectionalLight.cs
- RC2CryptoServiceProvider.cs
- CommonObjectSecurity.cs
- EntityDataSourceState.cs
- HtmlInputControl.cs
- fixedPageContentExtractor.cs
- ScriptModule.cs
- LogRestartAreaEnumerator.cs
- DbProviderFactoriesConfigurationHandler.cs
- DPTypeDescriptorContext.cs
- SafeFileMappingHandle.cs
- FixedSOMGroup.cs
- ReverseInheritProperty.cs
- ToolStripContentPanel.cs
- KeyBinding.cs
- DeploymentSectionCache.cs
- CompiledAction.cs
- XmlSchemaSimpleContentExtension.cs
- MsmqBindingBase.cs
- wgx_sdk_version.cs
- HtmlShim.cs
- FloatSumAggregationOperator.cs
- DataGridViewDataErrorEventArgs.cs
- ModelTreeManager.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- MachineSettingsSection.cs
- SchemaManager.cs
- NetMsmqBindingElement.cs
- CompoundFileStorageReference.cs
- FastEncoder.cs
- listitem.cs
- ComponentRenameEvent.cs
- SystemIPInterfaceStatistics.cs