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
- IndexerNameAttribute.cs
- EndpointBehaviorElementCollection.cs
- VirtualizingStackPanel.cs
- PageCodeDomTreeGenerator.cs
- SqlDataSourceCommandEventArgs.cs
- NoneExcludedImageIndexConverter.cs
- BitmapEffect.cs
- CancelEventArgs.cs
- Button.cs
- DesignerLoader.cs
- BindingFormattingDialog.cs
- ToolBarTray.cs
- JsonReader.cs
- NextPreviousPagerField.cs
- HtmlInputControl.cs
- DataRowView.cs
- ThousandthOfEmRealDoubles.cs
- DataGridViewSelectedCellCollection.cs
- MobileControlBuilder.cs
- SecurityAlgorithmSuiteConverter.cs
- ShadowGlyph.cs
- CodeTypeParameter.cs
- ForwardPositionQuery.cs
- ExpandCollapsePattern.cs
- DataBoundControlAdapter.cs
- TdsRecordBufferSetter.cs
- SystemWebExtensionsSectionGroup.cs
- QilDataSource.cs
- ProgressBarRenderer.cs
- VoiceChangeEventArgs.cs
- BidOverLoads.cs
- XmlSchemaElement.cs
- WebPartEditorOkVerb.cs
- VirtualPathProvider.cs
- PtsHost.cs
- EventLogPermissionEntry.cs
- VBCodeProvider.cs
- FlowDocumentView.cs
- FormViewPageEventArgs.cs
- ApplicationContext.cs
- DataGrid.cs
- InputEventArgs.cs
- QilGenerator.cs
- HttpContext.cs
- UserPreferenceChangedEventArgs.cs
- TickBar.cs
- ScrollChrome.cs
- TextElement.cs
- unsafenativemethodstextservices.cs
- FontNameEditor.cs
- SingleAnimationUsingKeyFrames.cs
- CriticalHandle.cs
- URLString.cs
- ProbeMatchesCD1.cs
- FrameworkContentElementAutomationPeer.cs
- MatrixAnimationUsingPath.cs
- EventMemberCodeDomSerializer.cs
- HtmlInputImage.cs
- PropertyGridEditorPart.cs
- HGlobalSafeHandle.cs
- ElementsClipboardData.cs
- SiteMapDataSourceView.cs
- Clipboard.cs
- SectionInformation.cs
- StatusBar.cs
- XmlMemberMapping.cs
- Size.cs
- CellParaClient.cs
- FormatSettings.cs
- SrgsItemList.cs
- SelectionRange.cs
- LineInfo.cs
- ToolStripProgressBar.cs
- IxmlLineInfo.cs
- CustomCredentialPolicy.cs
- UrlPath.cs
- UIElement.cs
- EdmItemCollection.cs
- LayoutManager.cs
- XPathDocumentNavigator.cs
- DesignerRegionMouseEventArgs.cs
- ExceptionValidationRule.cs
- ILGenerator.cs
- ComponentCommands.cs
- LogExtentCollection.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- SyncOperationState.cs
- SurrogateSelector.cs
- StoryFragments.cs
- PlainXmlDeserializer.cs
- Configuration.cs
- LayoutManager.cs
- CompiledRegexRunnerFactory.cs
- HMAC.cs
- AuthenticateEventArgs.cs
- InstanceData.cs
- SrgsNameValueTag.cs
- GridViewRow.cs
- ThousandthOfEmRealPoints.cs
- _NetRes.cs