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
- HandlerWithFactory.cs
- DictionaryEditChange.cs
- MouseBinding.cs
- RoutedEventValueSerializer.cs
- WindowsGraphics.cs
- RequestUriProcessor.cs
- CategoryGridEntry.cs
- IsolatedStorageException.cs
- DynamicActivity.cs
- basecomparevalidator.cs
- SqlConnectionManager.cs
- QilCloneVisitor.cs
- Assert.cs
- LambdaCompiler.Unary.cs
- IpcServerChannel.cs
- DataContractSerializerSection.cs
- InteropAutomationProvider.cs
- DesignerLoader.cs
- CreateUserWizard.cs
- TemplateBindingExpression.cs
- TreeViewEvent.cs
- DebugControllerThread.cs
- RoleManagerEventArgs.cs
- MinMaxParagraphWidth.cs
- X509UI.cs
- DbXmlEnabledProviderManifest.cs
- TextRangeAdaptor.cs
- SystemIPInterfaceStatistics.cs
- WebPartChrome.cs
- DirectoryObjectSecurity.cs
- ImageFormat.cs
- XmlSchemaCompilationSettings.cs
- _emptywebproxy.cs
- OperatorExpressions.cs
- XmlLanguageConverter.cs
- EntitySetBase.cs
- GridViewRowPresenter.cs
- ConsoleKeyInfo.cs
- ReferencedCollectionType.cs
- AssemblyCache.cs
- HelloMessage11.cs
- LocalValueEnumerator.cs
- TargetParameterCountException.cs
- TextEditorParagraphs.cs
- CalendarDataBindingHandler.cs
- MouseButton.cs
- ListBoxItemAutomationPeer.cs
- WebResponse.cs
- OutputCacheSection.cs
- XmlQueryType.cs
- TextFormatterContext.cs
- ToolStripSeparatorRenderEventArgs.cs
- NumberSubstitution.cs
- IgnoreSectionHandler.cs
- MatrixCamera.cs
- OptionalMessageQuery.cs
- SafeRegistryKey.cs
- DuplicateWaitObjectException.cs
- HighlightVisual.cs
- LocalizableResourceBuilder.cs
- XmlSchemaObject.cs
- RelationshipType.cs
- TypeDelegator.cs
- WebConvert.cs
- DataView.cs
- VisualBrush.cs
- StorageBasedPackageProperties.cs
- UnsafeNativeMethods.cs
- ImageSourceValueSerializer.cs
- InvalidateEvent.cs
- NativeMethods.cs
- ServicePointManager.cs
- LocalizableResourceBuilder.cs
- GeometryHitTestResult.cs
- altserialization.cs
- DataSourceListEditor.cs
- BreakRecordTable.cs
- XmlSchemaNotation.cs
- HttpStreams.cs
- LogWriteRestartAreaState.cs
- FileNotFoundException.cs
- PenThread.cs
- PatternMatcher.cs
- HttpModuleAction.cs
- HtmlContainerControl.cs
- PointValueSerializer.cs
- OdbcCommandBuilder.cs
- CollectionView.cs
- DbConnectionPoolGroupProviderInfo.cs
- XmlDataImplementation.cs
- BaseDataList.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- VirtualPathExtension.cs
- ToolStripContentPanel.cs
- AnnotationObservableCollection.cs
- ExceptionUtil.cs
- ClientData.cs
- WorkflowPrinting.cs
- ExtendedProperty.cs
- Registry.cs