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
- CommandConverter.cs
- AuthenticodeSignatureInformation.cs
- DataGridViewAccessibleObject.cs
- cookiecontainer.cs
- ExtendedProtectionPolicy.cs
- BitmapCache.cs
- mongolianshape.cs
- SchemaCollectionCompiler.cs
- RequestBringIntoViewEventArgs.cs
- ReliableSession.cs
- ObjectManager.cs
- objectresult_tresulttype.cs
- CultureInfo.cs
- UIElement.cs
- WebScriptClientGenerator.cs
- SymLanguageType.cs
- ReflectionServiceProvider.cs
- ApplicationActivator.cs
- BatchServiceHost.cs
- EventLogEntryCollection.cs
- ArgIterator.cs
- DiscoveryDocument.cs
- DbDeleteCommandTree.cs
- DynamicRendererThreadManager.cs
- PolicyManager.cs
- NotImplementedException.cs
- IsolatedStorage.cs
- ByteStreamMessageUtility.cs
- FileUtil.cs
- ContextMenuStripGroup.cs
- SoapElementAttribute.cs
- RowCache.cs
- StylusShape.cs
- HttpClientCertificate.cs
- ListArgumentProvider.cs
- AbandonedMutexException.cs
- UrlPath.cs
- ScriptResourceHandler.cs
- DelegatedStream.cs
- TextComposition.cs
- HandleRef.cs
- ScriptReferenceEventArgs.cs
- ResolveResponse.cs
- XmlSchemaSimpleType.cs
- CompositeFontInfo.cs
- Profiler.cs
- SmtpNetworkElement.cs
- ClockController.cs
- MeshGeometry3D.cs
- Command.cs
- InstanceKeyCollisionException.cs
- BinarySerializer.cs
- AliasedSlot.cs
- CodeNamespace.cs
- SymbolTable.cs
- TextStore.cs
- DataControlLinkButton.cs
- DataRowView.cs
- X509SubjectKeyIdentifierClause.cs
- HyperLinkColumn.cs
- Missing.cs
- EventDescriptor.cs
- XPathItem.cs
- FactoryId.cs
- _ChunkParse.cs
- ColumnMap.cs
- MultipleViewPatternIdentifiers.cs
- SchemaTableOptionalColumn.cs
- BinaryKeyIdentifierClause.cs
- AccessViolationException.cs
- shaperfactoryquerycachekey.cs
- Selection.cs
- ExpressionEvaluator.cs
- EnumDataContract.cs
- DataSourceNameHandler.cs
- ByteStream.cs
- MergeFailedEvent.cs
- DataSet.cs
- SignatureGenerator.cs
- ToolStripSettings.cs
- BinaryConverter.cs
- SmiMetaDataProperty.cs
- validation.cs
- storepermission.cs
- ItemList.cs
- SchemaType.cs
- DynamicILGenerator.cs
- CollectionChangedEventManager.cs
- XmlSerializationGeneratedCode.cs
- ThreadPool.cs
- CodeMemberField.cs
- FileReservationCollection.cs
- URI.cs
- DbConnectionFactory.cs
- ConnectorDragDropGlyph.cs
- NotCondition.cs
- TextParagraphProperties.cs
- Focus.cs
- SqlDataSourceStatusEventArgs.cs
- TemplateInstanceAttribute.cs