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
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- InputDevice.cs
- RecognizerBase.cs
- clipboard.cs
- EmptyCollection.cs
- Msec.cs
- AnnotationObservableCollection.cs
- OneToOneMappingSerializer.cs
- Message.cs
- CryptoProvider.cs
- FontUnitConverter.cs
- ProfileParameter.cs
- ReaderWriterLock.cs
- DropSourceBehavior.cs
- ComponentChangedEvent.cs
- EventLogPropertySelector.cs
- WebReferencesBuildProvider.cs
- XMLSchema.cs
- SQLInt16.cs
- AttributeSetAction.cs
- HwndHost.cs
- TimerEventSubscriptionCollection.cs
- CommonDialog.cs
- PointAnimationUsingKeyFrames.cs
- AssemblyInfo.cs
- SystemIPv4InterfaceProperties.cs
- SchemaCreator.cs
- Messages.cs
- DataGridTable.cs
- PageClientProxyGenerator.cs
- WebBrowserHelper.cs
- RecipientInfo.cs
- SerialPort.cs
- FileDataSourceCache.cs
- Block.cs
- FormView.cs
- MapPathBasedVirtualPathProvider.cs
- ToolStripLabel.cs
- CodeExporter.cs
- SQLGuidStorage.cs
- DoubleAnimationUsingKeyFrames.cs
- HostAdapter.cs
- SymbolType.cs
- Style.cs
- ThaiBuddhistCalendar.cs
- QilReference.cs
- SharedRuntimeState.cs
- ToolboxItemLoader.cs
- DrawingBrush.cs
- ContainerParagraph.cs
- FilteredSchemaElementLookUpTable.cs
- TimeManager.cs
- WasEndpointConfigContainer.cs
- PersonalizationState.cs
- CounterCreationData.cs
- TextOptions.cs
- GcHandle.cs
- FormClosingEvent.cs
- SqlStream.cs
- ResourceAssociationSet.cs
- TypeExtension.cs
- AppDomainProtocolHandler.cs
- WebBrowserContainer.cs
- PerfCounterSection.cs
- PersistenceContextEnlistment.cs
- securitycriticaldataClass.cs
- PolyLineSegment.cs
- TransactionState.cs
- BaseCAMarshaler.cs
- _NegoState.cs
- StoragePropertyMapping.cs
- Emitter.cs
- RepeatButtonAutomationPeer.cs
- PageCodeDomTreeGenerator.cs
- InternalConfigEventArgs.cs
- RelatedPropertyManager.cs
- DoubleCollection.cs
- EmptyEnumerator.cs
- ChannelSinkStacks.cs
- XmlUtil.cs
- Formatter.cs
- EntityDataSourceView.cs
- WindowsListViewScroll.cs
- DataGridItem.cs
- SmtpNegotiateAuthenticationModule.cs
- PairComparer.cs
- CompositeClientFormatter.cs
- DataGridViewCellToolTipTextNeededEventArgs.cs
- ClipboardData.cs
- FormViewRow.cs
- RelatedView.cs
- CryptoKeySecurity.cs
- EntityDesignerDataSourceView.cs
- CryptoStream.cs
- TreeIterator.cs
- EventMappingSettings.cs
- StructuredType.cs
- TextDecoration.cs
- ImageAnimator.cs
- UiaCoreApi.cs
- WebPartTracker.cs