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
- DispatcherEventArgs.cs
- TypeDependencyAttribute.cs
- SystemWebExtensionsSectionGroup.cs
- Rect3DValueSerializer.cs
- ComboBoxItem.cs
- DirectoryNotFoundException.cs
- MergeEnumerator.cs
- RemoteArgument.cs
- WebConfigurationFileMap.cs
- BaseCAMarshaler.cs
- MenuEventArgs.cs
- AnonymousIdentificationSection.cs
- TypeConverter.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- BCLDebug.cs
- EventLog.cs
- DocumentOrderQuery.cs
- Material.cs
- CustomTypeDescriptor.cs
- SystemSounds.cs
- ExternalFile.cs
- StateDesigner.CommentLayoutGlyph.cs
- BitVec.cs
- KernelTypeValidation.cs
- ConnectionStringsSection.cs
- StorageComplexPropertyMapping.cs
- TiffBitmapDecoder.cs
- ResourceContainer.cs
- CDSsyncETWBCLProvider.cs
- FormClosingEvent.cs
- CompatibleComparer.cs
- ListViewUpdatedEventArgs.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- SR.cs
- Light.cs
- DiffuseMaterial.cs
- SafeTokenHandle.cs
- SecureConversationDriver.cs
- TypeDescriptorFilterService.cs
- ToolboxComponentsCreatedEventArgs.cs
- DataBinding.cs
- AddInStore.cs
- ObjectConverter.cs
- LogExtent.cs
- WindowsFormsHostPropertyMap.cs
- CalendarButton.cs
- DeliveryStrategy.cs
- ReadWriteSpinLock.cs
- SQLString.cs
- SchemaMapping.cs
- WebProxyScriptElement.cs
- ServiceOperationParameter.cs
- HttpHandlersSection.cs
- ProjectionPruner.cs
- SharedStatics.cs
- WebPartZoneAutoFormat.cs
- CounterNameConverter.cs
- IPAddress.cs
- StylusDevice.cs
- XmlWrappingWriter.cs
- IncrementalHitTester.cs
- COM2FontConverter.cs
- GenericXmlSecurityToken.cs
- RestHandlerFactory.cs
- ReferenceEqualityComparer.cs
- BulletedListEventArgs.cs
- DrawingGroup.cs
- GeneralTransformGroup.cs
- PropertyItemInternal.cs
- Icon.cs
- DiagnosticsConfiguration.cs
- FileUtil.cs
- XmlWriterSettings.cs
- CompoundFileReference.cs
- GlyphInfoList.cs
- ParentQuery.cs
- Convert.cs
- MouseActionValueSerializer.cs
- GridItemCollection.cs
- SqlGatherProducedAliases.cs
- FormViewPagerRow.cs
- ExpandSegment.cs
- ISO2022Encoding.cs
- WebPartTransformer.cs
- EventWaitHandleSecurity.cs
- WebFaultClientMessageInspector.cs
- StrongName.cs
- ParameterToken.cs
- TemplateBaseAction.cs
- UInt32.cs
- SortedList.cs
- AuthorizationRule.cs
- CornerRadius.cs
- RemoveStoryboard.cs
- DataGridViewTopRowAccessibleObject.cs
- XmlEncodedRawTextWriter.cs
- DBCSCodePageEncoding.cs
- ErrorHandler.cs
- bidPrivateBase.cs
- ServiceDeploymentInfo.cs