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
- ThreadAbortException.cs
- QueryContext.cs
- OptionalMessageQuery.cs
- InputBuffer.cs
- DataGridView.cs
- BasicViewGenerator.cs
- ReachNamespaceInfo.cs
- XmlWriterTraceListener.cs
- TableLayoutStyleCollection.cs
- Int32KeyFrameCollection.cs
- FacetDescriptionElement.cs
- WeakEventTable.cs
- MexServiceChannelBuilder.cs
- DerivedKeySecurityTokenStub.cs
- ITreeGenerator.cs
- TypedElement.cs
- _IPv6Address.cs
- ModelItemCollectionImpl.cs
- DiagnosticsConfigurationHandler.cs
- StaticTextPointer.cs
- MasterPageParser.cs
- OleDbConnectionFactory.cs
- BuildManager.cs
- HtmlInputReset.cs
- DbConnectionInternal.cs
- EventsTab.cs
- ActiveXContainer.cs
- SizeIndependentAnimationStorage.cs
- CollectionView.cs
- ArglessEventHandlerProxy.cs
- DataControlPagerLinkButton.cs
- DataBinder.cs
- ClassHandlersStore.cs
- BitmapEffectInput.cs
- Thumb.cs
- ManagementScope.cs
- NumberFormatter.cs
- CheckBox.cs
- ResourcesChangeInfo.cs
- WindowsAltTab.cs
- StrokeCollection2.cs
- SafePointer.cs
- QuerySubExprEliminator.cs
- CompilerErrorCollection.cs
- Verify.cs
- FontStretchConverter.cs
- StrokeRenderer.cs
- BamlRecordWriter.cs
- Util.cs
- SqlCacheDependency.cs
- DirectoryLocalQuery.cs
- RequestTimeoutManager.cs
- _ContextAwareResult.cs
- IsolatedStorageFile.cs
- DataGridViewButtonColumn.cs
- MetabaseServerConfig.cs
- SQLBytesStorage.cs
- RewritingProcessor.cs
- BitmapFrameEncode.cs
- AffineTransform3D.cs
- Visitor.cs
- WebPartDisplayModeCancelEventArgs.cs
- CodeNamespaceCollection.cs
- httpserverutility.cs
- QilInvokeEarlyBound.cs
- SqlParameterizer.cs
- GuidelineCollection.cs
- HighContrastHelper.cs
- DataIdProcessor.cs
- SequentialUshortCollection.cs
- RSAPKCS1SignatureDeformatter.cs
- DataFormats.cs
- CharacterBufferReference.cs
- CatchBlock.cs
- TryLoadRunnableWorkflowCommand.cs
- GroupBoxAutomationPeer.cs
- ConvertersCollection.cs
- StatusCommandUI.cs
- HttpProfileGroupBase.cs
- MarshalByRefObject.cs
- RegexCapture.cs
- ProcessHostFactoryHelper.cs
- SiteMapDataSourceView.cs
- JapaneseLunisolarCalendar.cs
- ComponentEditorPage.cs
- ServiceNotStartedException.cs
- Bold.cs
- EventListenerClientSide.cs
- CellTreeNode.cs
- JsonDeserializer.cs
- VectorCollectionValueSerializer.cs
- updateconfighost.cs
- XmlBoundElement.cs
- ComPlusTraceRecord.cs
- ComboBox.cs
- NamespaceCollection.cs
- HttpRuntime.cs
- DbXmlEnabledProviderManifest.cs
- Function.cs
- GenericWebPart.cs