Code:
/ 4.0 / 4.0 / 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.
//----------------------------------------------------------------------------
//
//
// 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
- DocumentCollection.cs
- ListCollectionView.cs
- NativeConfigurationLoader.cs
- IsolatedStorageFilePermission.cs
- FormsAuthenticationUser.cs
- URIFormatException.cs
- CodeCompileUnit.cs
- CryptoKeySecurity.cs
- XmlSerializerNamespaces.cs
- RenderDataDrawingContext.cs
- ListControl.cs
- BridgeDataReader.cs
- ConstraintConverter.cs
- DefaultBindingPropertyAttribute.cs
- HtmlInputReset.cs
- FormViewPageEventArgs.cs
- SqlRemoveConstantOrderBy.cs
- JournalEntryListConverter.cs
- DataObjectMethodAttribute.cs
- SMSvcHost.cs
- PresentationAppDomainManager.cs
- BaseTemplateParser.cs
- ConfigurationManagerHelper.cs
- Nodes.cs
- WaitHandleCannotBeOpenedException.cs
- CommonRemoteMemoryBlock.cs
- EncryptedReference.cs
- ContentPosition.cs
- DialogResultConverter.cs
- Context.cs
- TreeWalker.cs
- StyleCollectionEditor.cs
- XPathNodeIterator.cs
- EmbossBitmapEffect.cs
- CounterCreationData.cs
- ZipPackagePart.cs
- BufferModesCollection.cs
- ToolStripRendererSwitcher.cs
- TextServicesCompartmentContext.cs
- NestedContainer.cs
- ViewUtilities.cs
- ViewBase.cs
- XmlUrlResolver.cs
- Queue.cs
- RequestTimeoutManager.cs
- Int32Storage.cs
- ClientProxyGenerator.cs
- HttpApplicationStateWrapper.cs
- XmlEntityReference.cs
- DataIdProcessor.cs
- ThicknessKeyFrameCollection.cs
- ComponentGlyph.cs
- Set.cs
- TableLayoutRowStyleCollection.cs
- StringWriter.cs
- DataGridViewCell.cs
- HashAlgorithm.cs
- StringBlob.cs
- Size3DValueSerializer.cs
- DocumentEventArgs.cs
- ErasingStroke.cs
- SQLMoneyStorage.cs
- SqlBulkCopy.cs
- ContentValidator.cs
- ObjectStateFormatter.cs
- Image.cs
- HttpGetProtocolImporter.cs
- DesignRelation.cs
- StringAnimationBase.cs
- PasswordTextContainer.cs
- TextSegment.cs
- TextContainerHelper.cs
- GlyphRun.cs
- WebPartEditorOkVerb.cs
- NamespaceCollection.cs
- StringPropertyBuilder.cs
- MenuAdapter.cs
- FixedSOMElement.cs
- AttachedPropertyBrowsableAttribute.cs
- ParenExpr.cs
- BamlTreeUpdater.cs
- TextEditorContextMenu.cs
- ListBase.cs
- KnownTypes.cs
- RawMouseInputReport.cs
- X509CertificateCollection.cs
- LazyTextWriterCreator.cs
- ScrollChrome.cs
- ObjectDesignerDataSourceView.cs
- StatusBarItem.cs
- CodeVariableDeclarationStatement.cs
- MissingSatelliteAssemblyException.cs
- IUnknownConstantAttribute.cs
- PropertyIdentifier.cs
- SqlTrackingWorkflowInstance.cs
- CapabilitiesPattern.cs
- InheritanceContextHelper.cs
- StrokeCollectionDefaultValueFactory.cs
- StylusPointPropertyInfo.cs
- TransformerInfoCollection.cs