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
- HtmlButton.cs
- RemotingServices.cs
- SHA384CryptoServiceProvider.cs
- EventLogEntryCollection.cs
- SharedPerformanceCounter.cs
- ActivityBindForm.cs
- Converter.cs
- GCHandleCookieTable.cs
- _UncName.cs
- TableCellAutomationPeer.cs
- FrameworkElement.cs
- InlinedAggregationOperatorEnumerator.cs
- DataGridViewRowsRemovedEventArgs.cs
- MobileControlDesigner.cs
- Binding.cs
- PointHitTestResult.cs
- SQLDateTimeStorage.cs
- PropertyCondition.cs
- DockingAttribute.cs
- MethodBuilderInstantiation.cs
- PiiTraceSource.cs
- unsafenativemethodstextservices.cs
- loginstatus.cs
- DataGridViewCellStyleChangedEventArgs.cs
- GridView.cs
- _BufferOffsetSize.cs
- UInt64Converter.cs
- MouseWheelEventArgs.cs
- CompletedAsyncResult.cs
- ResizeGrip.cs
- HttpModule.cs
- DependencyStoreSurrogate.cs
- ExpressionVisitor.cs
- SqlInternalConnection.cs
- ZipIOExtraFieldZip64Element.cs
- BuildProvider.cs
- PropertyGridView.cs
- HostVisual.cs
- SetterBaseCollection.cs
- Attachment.cs
- ListViewItem.cs
- ComboBox.cs
- ChangeTracker.cs
- SqlClientFactory.cs
- ContainerUtilities.cs
- _ListenerResponseStream.cs
- Transform3D.cs
- ComAdminWrapper.cs
- TextDecorationLocationValidation.cs
- CodeLabeledStatement.cs
- EntitySqlQueryCacheKey.cs
- ReferentialConstraintRoleElement.cs
- listviewsubitemcollectioneditor.cs
- ToolStripContainerActionList.cs
- BooleanFunctions.cs
- SparseMemoryStream.cs
- TeredoHelper.cs
- ColumnResult.cs
- DataTableCollection.cs
- LambdaCompiler.Lambda.cs
- EntityStoreSchemaFilterEntry.cs
- WindowsSecurityTokenAuthenticator.cs
- DataGridViewCheckBoxColumn.cs
- RuleElement.cs
- VariableQuery.cs
- Msec.cs
- RemoveStoryboard.cs
- PolygonHotSpot.cs
- AsmxEndpointPickerExtension.cs
- SqlDataReaderSmi.cs
- ContractMethodParameterInfo.cs
- CollectionContainer.cs
- PipeSecurity.cs
- RadioButton.cs
- TransactionScope.cs
- EntityCommand.cs
- BackgroundFormatInfo.cs
- DataControlFieldCell.cs
- FileVersion.cs
- CatalogZone.cs
- CreationContext.cs
- LayoutUtils.cs
- Parameter.cs
- InvalidDataException.cs
- DesignerMetadata.cs
- FocusWithinProperty.cs
- PartitionerQueryOperator.cs
- ItemCollection.cs
- NameValueConfigurationElement.cs
- TTSVoice.cs
- DefaultDiscoveryServiceExtension.cs
- DrawItemEvent.cs
- SqlTopReducer.cs
- SoapMessage.cs
- QueryableDataSource.cs
- MethodExpr.cs
- WebPartPersonalization.cs
- PeerUnsafeNativeMethods.cs
- Pair.cs
- PropertyChangingEventArgs.cs