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
- BitmapPalette.cs
- LineProperties.cs
- sqlcontext.cs
- TraceHelpers.cs
- Matrix3DStack.cs
- PlaceHolder.cs
- Crc32Helper.cs
- PersonalizationStateInfoCollection.cs
- _LocalDataStoreMgr.cs
- ProcessHostConfigUtils.cs
- WindowManager.cs
- EncoderFallback.cs
- DataGridCaption.cs
- HtmlFormWrapper.cs
- PolyQuadraticBezierSegment.cs
- ElementAtQueryOperator.cs
- AssemblyCacheEntry.cs
- PropertySegmentSerializer.cs
- TrackingProfile.cs
- CompositeScriptReference.cs
- SoapIncludeAttribute.cs
- SqlServer2KCompatibilityCheck.cs
- SecurityPermission.cs
- CollectionConverter.cs
- VScrollBar.cs
- RelationshipConverter.cs
- InkCollectionBehavior.cs
- SimpleApplicationHost.cs
- EntityContainerAssociationSetEnd.cs
- HistoryEventArgs.cs
- ParenthesizePropertyNameAttribute.cs
- RotateTransform3D.cs
- QueryCacheManager.cs
- Transform3D.cs
- CapabilitiesAssignment.cs
- Renderer.cs
- SerialPort.cs
- Dictionary.cs
- DefaultWorkflowSchedulerService.cs
- TraceSwitch.cs
- StrongNameMembershipCondition.cs
- MSG.cs
- PrinterSettings.cs
- ListView.cs
- XamlSerializationHelper.cs
- Empty.cs
- Label.cs
- Utilities.cs
- UIntPtr.cs
- TransactionInterop.cs
- ObjectAnimationBase.cs
- Subset.cs
- RootBuilder.cs
- Mappings.cs
- InheritanceContextHelper.cs
- DataGridViewSelectedCellCollection.cs
- HttpRequestCacheValidator.cs
- XmlDomTextWriter.cs
- WmlControlAdapter.cs
- SqlDataRecord.cs
- FtpCachePolicyElement.cs
- ArraySubsetEnumerator.cs
- EncryptedData.cs
- SafeWaitHandle.cs
- DoubleLinkListEnumerator.cs
- PreProcessor.cs
- EncryptedReference.cs
- MLangCodePageEncoding.cs
- InProcStateClientManager.cs
- TypeSystem.cs
- MailSettingsSection.cs
- SafeRightsManagementSessionHandle.cs
- Rect3D.cs
- dtdvalidator.cs
- Int32AnimationBase.cs
- DataBoundLiteralControl.cs
- ModelEditingScope.cs
- NavigationExpr.cs
- XmlReturnWriter.cs
- ResourceExpressionEditor.cs
- ExtendLockAsyncResult.cs
- EncoderParameters.cs
- ListViewDeleteEventArgs.cs
- DataGridViewRowCancelEventArgs.cs
- TextRunCache.cs
- DefinitionUpdate.cs
- Activator.cs
- CompilerTypeWithParams.cs
- PeerTransportListenAddressValidatorAttribute.cs
- SerializableAttribute.cs
- DetailsViewCommandEventArgs.cs
- XmlSchemaCollection.cs
- PageThemeCodeDomTreeGenerator.cs
- DateTimeConverter2.cs
- PageStatePersister.cs
- AssociationEndMember.cs
- CorePropertiesFilter.cs
- ChannelCredentials.cs
- CreatingCookieEventArgs.cs
- ScriptingScriptResourceHandlerSection.cs