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
- TextDecorations.cs
- ProfileParameter.cs
- RouteParameter.cs
- ImageCodecInfo.cs
- EntityDataSourceMemberPath.cs
- VirtualPath.cs
- NativeMethods.cs
- EventlogProvider.cs
- ObjectDataSourceFilteringEventArgs.cs
- Stacktrace.cs
- XmlTextEncoder.cs
- ConfigurationStrings.cs
- FloaterParagraph.cs
- Single.cs
- SchemaCollectionPreprocessor.cs
- Single.cs
- PropertyDescriptorComparer.cs
- InvokeProviderWrapper.cs
- CriticalExceptions.cs
- TablePatternIdentifiers.cs
- SupportsEventValidationAttribute.cs
- Enum.cs
- WebPartCollection.cs
- SqlCacheDependencyDatabase.cs
- DayRenderEvent.cs
- EndEvent.cs
- CacheForPrimitiveTypes.cs
- AliasGenerator.cs
- DiagnosticTraceSource.cs
- SqlHelper.cs
- _SpnDictionary.cs
- WebPartCatalogCloseVerb.cs
- SessionIDManager.cs
- ColumnMapTranslator.cs
- SpecularMaterial.cs
- FlowDocumentPage.cs
- DataServiceProviderMethods.cs
- UTF7Encoding.cs
- DbModificationClause.cs
- WebChannelFactory.cs
- ConcurrentDictionary.cs
- ObjectSecurity.cs
- TreeNodeEventArgs.cs
- ResourceManagerWrapper.cs
- SafeBitVector32.cs
- ContentElementCollection.cs
- UnionExpr.cs
- ConstructorExpr.cs
- KeyedCollection.cs
- MessageSecurityVersion.cs
- BuilderInfo.cs
- StandardOleMarshalObject.cs
- PeerHelpers.cs
- NativeMethods.cs
- baseaxisquery.cs
- RtfToXamlLexer.cs
- TextParentUndoUnit.cs
- ToolBar.cs
- FloatUtil.cs
- lengthconverter.cs
- UIElementHelper.cs
- AsyncStreamReader.cs
- UnhandledExceptionEventArgs.cs
- CompilationUtil.cs
- AttachedPropertyBrowsableForChildrenAttribute.cs
- BackEase.cs
- BitmapEffectCollection.cs
- SkewTransform.cs
- SizeKeyFrameCollection.cs
- CodeTypeDelegate.cs
- AnnotationResourceCollection.cs
- XamlReaderHelper.cs
- Pen.cs
- WebPartEventArgs.cs
- BoolExpr.cs
- HttpContextWrapper.cs
- DefinitionBase.cs
- KeySpline.cs
- TextSelection.cs
- ValuePattern.cs
- LabelLiteral.cs
- ExternalCalls.cs
- AssociatedControlConverter.cs
- ServiceBehaviorElement.cs
- FamilyMap.cs
- CompressEmulationStream.cs
- TemplateBaseAction.cs
- ExpanderAutomationPeer.cs
- OletxTransactionHeader.cs
- DelegateSerializationHolder.cs
- HierarchicalDataBoundControlAdapter.cs
- BoolExpressionVisitors.cs
- ReachDocumentSequenceSerializer.cs
- codemethodreferenceexpression.cs
- FontStretches.cs
- InterleavedZipPartStream.cs
- ObjectStateManagerMetadata.cs
- MemoryFailPoint.cs
- XPathSelectionIterator.cs
- ToolstripProfessionalRenderer.cs