Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Core / MS / Internal / FontCache / TypefaceMetricsCache.cs / 1 / TypefaceMetricsCache.cs
//---------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // Description: TypefaceMetricsCache // // History: 5-25-2005 [....], Created. // //--------------------------------------------------------------------------- using System; using System.Collections; using System.Security; using System.Text; using System.Windows; using System.Windows.Media; using System.Windows.Threading; using MS.Internal.FontFace; using MS.Internal.Shaping; namespace MS.Internal.FontCache { ////// TypefaceMetricsCache caches managed objects related to a Font's realization. It caches the 3 kinds of /// key-value pairs currently: /// o Friendly name - canonical name /// o FontFamilyIdentifier - First IFontFamily /// o Typeface - CachedTypeface /// /// The cache lives in managed space to save working set by allowing multiple instances of FontFamily /// and Typeface to share the same IFontFamily and ITypefaceMetrics object. /// For example: in MSNBAML, there are 342 typeface objects and they are canonicalized to only 5 /// ITypefaceMetrics. /// /// When cache is full, a new instance of the hashtable will be created and the old one will be discarded. /// Hence, it is important that the cached object do not keep a pointer to the hashtable to ensure obsolete cached /// values are properly GC'ed. /// internal static class TypefaceMetricsCache { ////// Readonly lookup from the cache. /// internal static object ReadonlyLookup(object key) { return _hashTable[key]; } ////// The method adds values into the cache. It uses lock to synchronize access. /// internal static void Add(object key, object value) { // Hashtable allows for one writer and multiple reader at the same time. So we don't have // read-write confict. In heavy threading environment, the worst is adding // the same value more than once. lock(_lock) { if (_hashTable.Count >= MaxCacheCapacity) { // when cache is full, we just renew the cache. _hashTable = new Hashtable(MaxCacheCapacity); } _hashTable[key] = value; } } private static Hashtable _hashTable = new Hashtable(MaxCacheCapacity); private static object _lock = new object(); private const int MaxCacheCapacity = 64; // Maximum cache capacity } } // 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
- ServiceBuildProvider.cs
- MediaContextNotificationWindow.cs
- AppDomainAttributes.cs
- PointKeyFrameCollection.cs
- DataGridViewSelectedCellCollection.cs
- PropertyGeneratedEventArgs.cs
- MetadataExchangeBindings.cs
- EmptyControlCollection.cs
- MsmqQueue.cs
- XhtmlCssHandler.cs
- DoubleStorage.cs
- XXXInfos.cs
- _UncName.cs
- DTCTransactionManager.cs
- TokenizerHelper.cs
- RealizationContext.cs
- AnimationClockResource.cs
- OverflowException.cs
- Figure.cs
- Mapping.cs
- Size3D.cs
- FlowLayoutPanelDesigner.cs
- DecimalConverter.cs
- AnnotationService.cs
- DeviceSpecificDialogCachedState.cs
- ProxyFragment.cs
- KnownBoxes.cs
- ArraySubsetEnumerator.cs
- ElementHost.cs
- PersonalizationStateQuery.cs
- CapabilitiesUse.cs
- DataGridCell.cs
- RoleService.cs
- DataGridViewRowEventArgs.cs
- ProcessThread.cs
- XmlDocumentType.cs
- HttpResponseInternalBase.cs
- DoubleCollection.cs
- ProcessHostFactoryHelper.cs
- XmlQueryStaticData.cs
- OverrideMode.cs
- AsynchronousChannelMergeEnumerator.cs
- ImageListUtils.cs
- SqlCaseSimplifier.cs
- AccessDataSource.cs
- TerminatorSinks.cs
- WsdlBuildProvider.cs
- XamlFilter.cs
- IdentityReference.cs
- RawUIStateInputReport.cs
- HatchBrush.cs
- PointLightBase.cs
- SessionStateContainer.cs
- Math.cs
- ExtensionSimplifierMarkupObject.cs
- _HeaderInfo.cs
- SqlDependency.cs
- FontInfo.cs
- Encoding.cs
- ListItemCollection.cs
- AttachedAnnotationChangedEventArgs.cs
- UnsafeNativeMethods.cs
- WindowsSlider.cs
- GridViewRowPresenterBase.cs
- SettingsPropertyValueCollection.cs
- SessionParameter.cs
- NameTable.cs
- PersonalizationState.cs
- InfoCardRSAOAEPKeyExchangeDeformatter.cs
- WarningException.cs
- HotSpot.cs
- SqlDataSourceFilteringEventArgs.cs
- ReachPageContentCollectionSerializer.cs
- LocalizationCodeDomSerializer.cs
- ILGenerator.cs
- Decorator.cs
- EntitySqlQueryCacheKey.cs
- PrivilegeNotHeldException.cs
- nulltextnavigator.cs
- DeadCharTextComposition.cs
- NaturalLanguageHyphenator.cs
- XmlSchemaChoice.cs
- DrawingAttributeSerializer.cs
- DoWorkEventArgs.cs
- KeyValuePair.cs
- NativeMethodsCLR.cs
- ResourcePart.cs
- WindowsGrip.cs
- ObjectStorage.cs
- SmiConnection.cs
- MULTI_QI.cs
- AsymmetricSignatureFormatter.cs
- XhtmlBasicSelectionListAdapter.cs
- HtmlTitle.cs
- Int64Storage.cs
- RemoteCryptoTokenProvider.cs
- EventHandlerList.cs
- ThreadExceptionDialog.cs
- WindowsHyperlink.cs
- EditCommandColumn.cs