Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ChildrenQuery.cs
- IFlowDocumentViewer.cs
- TextBoxLine.cs
- NamedPipeTransportManager.cs
- KeyFrames.cs
- DefaultWorkflowTransactionService.cs
- ProtocolsConfiguration.cs
- AuthenticationManager.cs
- NumberSubstitution.cs
- DesignerWithHeader.cs
- ParallelEnumerableWrapper.cs
- ArrangedElement.cs
- RuleSettings.cs
- RuleDefinitions.cs
- TextDecorationUnitValidation.cs
- TreeNodeStyle.cs
- WindowsGraphics2.cs
- PersonalizationProviderCollection.cs
- EvidenceTypeDescriptor.cs
- DefinitionUpdate.cs
- HttpWebResponse.cs
- HtmlForm.cs
- ProfileSettingsCollection.cs
- WaveHeader.cs
- DoubleLinkList.cs
- OdbcInfoMessageEvent.cs
- DataBindingCollection.cs
- DataServiceEntityAttribute.cs
- ValueExpressions.cs
- TabControl.cs
- SafeLibraryHandle.cs
- PageContentCollection.cs
- Internal.cs
- TemplateParser.cs
- Number.cs
- SchemaElementLookUpTable.cs
- IISMapPath.cs
- SingleTagSectionHandler.cs
- SqlProviderUtilities.cs
- _LocalDataStore.cs
- PenLineJoinValidation.cs
- CodeComment.cs
- SoapWriter.cs
- CreateUserWizard.cs
- Compilation.cs
- XmlEventCache.cs
- DataGridViewLayoutData.cs
- FilteredAttributeCollection.cs
- GenerateTemporaryTargetAssembly.cs
- GeneralTransform.cs
- EditorZone.cs
- TabletDevice.cs
- ApplicationId.cs
- X509Utils.cs
- SystemIPGlobalProperties.cs
- CodeDomConfigurationHandler.cs
- ClientTarget.cs
- RightsManagementEncryptedStream.cs
- UserValidatedEventArgs.cs
- AttachedPropertyInfo.cs
- CodeExpressionCollection.cs
- WorkflowWebService.cs
- WebPartDisplayModeEventArgs.cs
- ToolStripDesigner.cs
- SqlDataSourceConnectionPanel.cs
- TreeNodeBinding.cs
- HitTestWithPointDrawingContextWalker.cs
- Oci.cs
- ClientOptions.cs
- TemplateColumn.cs
- GridToolTip.cs
- ErrorRuntimeConfig.cs
- Context.cs
- TranslateTransform3D.cs
- RegularExpressionValidator.cs
- MenuItemStyle.cs
- AnchoredBlock.cs
- CopyNodeSetAction.cs
- AuthorizationBehavior.cs
- FieldMetadata.cs
- VideoDrawing.cs
- SymbolEqualComparer.cs
- ToolboxDataAttribute.cs
- DocumentViewerHelper.cs
- GlobalAclOperationRequirement.cs
- ContentPosition.cs
- SiteMapNodeCollection.cs
- SqlDataSourceView.cs
- HtmlEncodedRawTextWriter.cs
- EdmFunctions.cs
- CustomSignedXml.cs
- ShaperBuffers.cs
- MenuItemStyle.cs
- LinqMaximalSubtreeNominator.cs
- CatalogPart.cs
- DbModificationCommandTree.cs
- VoiceSynthesis.cs
- Matrix.cs
- WorkflowLayouts.cs
- CodeConstructor.cs