Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / MS / Internal / FontCache / TypefaceMetricsCache.cs / 1305600 / TypefaceMetricsCache.cs
//---------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // Description: TypefaceMetricsCache // // History: 5-25-2005 garyyang, 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ContainerVisual.cs
- AndMessageFilterTable.cs
- Misc.cs
- CultureInfo.cs
- StringCollection.cs
- CustomAttribute.cs
- RenderDataDrawingContext.cs
- GridViewSelectEventArgs.cs
- ProfessionalColorTable.cs
- CharStorage.cs
- BitmapDecoder.cs
- DataProtectionSecurityStateEncoder.cs
- CfgSemanticTag.cs
- Light.cs
- ThemeDictionaryExtension.cs
- JsonSerializer.cs
- BasicCellRelation.cs
- EventLogPermission.cs
- DataStreamFromComStream.cs
- SingleObjectCollection.cs
- ReturnValue.cs
- DiscoveryReference.cs
- IdentifierService.cs
- WorkflowItemsPresenter.cs
- SQLInt32.cs
- ScrollChangedEventArgs.cs
- DataKeyArray.cs
- IncrementalCompileAnalyzer.cs
- CalculatedColumn.cs
- ListViewGroup.cs
- WebPartCloseVerb.cs
- ToolStripPanelRenderEventArgs.cs
- NotImplementedException.cs
- FixedSOMPageElement.cs
- Clipboard.cs
- PreviewControlDesigner.cs
- SafeCryptoHandles.cs
- DbParameterHelper.cs
- XmlElementElement.cs
- DataSourceBooleanViewSchemaConverter.cs
- FormsAuthenticationCredentials.cs
- TypeExtension.cs
- KnownBoxes.cs
- PeerNameResolver.cs
- Configuration.cs
- OwnerDrawPropertyBag.cs
- LayoutEvent.cs
- XmlQueryOutput.cs
- PropertyPathConverter.cs
- AssemblyCollection.cs
- QualificationDataItem.cs
- MainMenu.cs
- XhtmlTextWriter.cs
- TypedReference.cs
- LinkedDataMemberFieldEditor.cs
- MD5HashHelper.cs
- MULTI_QI.cs
- Attachment.cs
- XmlReturnWriter.cs
- NameValueConfigurationCollection.cs
- GenericXmlSecurityToken.cs
- HttpsHostedTransportConfiguration.cs
- Hex.cs
- DetailsViewUpdateEventArgs.cs
- EventSinkHelperWriter.cs
- CommonProperties.cs
- RectangleHotSpot.cs
- TraceListeners.cs
- ConstructorBuilder.cs
- SHA512Cng.cs
- SplayTreeNode.cs
- EventHandlerService.cs
- SQLSingleStorage.cs
- BindingCollectionElement.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- ConfigurationValidatorBase.cs
- TraceListeners.cs
- ProfileEventArgs.cs
- DNS.cs
- DataListCommandEventArgs.cs
- RowVisual.cs
- Emitter.cs
- OleDbStruct.cs
- CodePageUtils.cs
- FileDialog.cs
- QueuePathDialog.cs
- VariableBinder.cs
- PersistenceTypeAttribute.cs
- XmlNamespaceDeclarationsAttribute.cs
- Logging.cs
- AbstractExpressions.cs
- ImageIndexConverter.cs
- LinkClickEvent.cs
- ValidateNames.cs
- Hyperlink.cs
- NodeLabelEditEvent.cs
- BooleanConverter.cs
- BufferedConnection.cs
- SectionXmlInfo.cs
- CodeAssignStatement.cs