Code:
/ 4.0 / 4.0 / 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. //---------------------------------------------------------------------------- // // 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
- CodeIndexerExpression.cs
- XmlEntity.cs
- ProcessingInstructionAction.cs
- HMACSHA512.cs
- WebAdminConfigurationHelper.cs
- MD5CryptoServiceProvider.cs
- safex509handles.cs
- CapabilitiesAssignment.cs
- LinqTreeNodeEvaluator.cs
- DebuggerAttributes.cs
- EntityChangedParams.cs
- MapPathBasedVirtualPathProvider.cs
- ReadOnlyCollection.cs
- BitmapSource.cs
- ToolStripPanelRow.cs
- ComponentEditorPage.cs
- FontUnitConverter.cs
- IdentityHolder.cs
- HttpCapabilitiesBase.cs
- NotEqual.cs
- DeferredElementTreeState.cs
- TimeZoneNotFoundException.cs
- EditorZone.cs
- FormViewPageEventArgs.cs
- FtpCachePolicyElement.cs
- GC.cs
- GeneralTransform3DTo2DTo3D.cs
- EntityContainer.cs
- FirewallWrapper.cs
- FormViewAutoFormat.cs
- ListViewPagedDataSource.cs
- TextLine.cs
- EdmType.cs
- SRef.cs
- TemplateXamlTreeBuilder.cs
- RelatedImageListAttribute.cs
- GroupLabel.cs
- UTF7Encoding.cs
- ConnectionConsumerAttribute.cs
- ImportOptions.cs
- ConfigurationProperty.cs
- RequestNavigateEventArgs.cs
- BitmapData.cs
- SafeEventLogWriteHandle.cs
- TdsEnums.cs
- UInt32.cs
- SpellerInterop.cs
- Command.cs
- DesignParameter.cs
- PolicyStatement.cs
- ToolStripSystemRenderer.cs
- LinkButton.cs
- CardSpaceException.cs
- CheckBoxFlatAdapter.cs
- CursorConverter.cs
- PersonalizableAttribute.cs
- RichTextBox.cs
- ProfileGroupSettingsCollection.cs
- FormParameter.cs
- XmlAutoDetectWriter.cs
- Control.cs
- InvalidProgramException.cs
- GPStream.cs
- SiteMembershipCondition.cs
- DoubleLinkListEnumerator.cs
- SimpleHandlerFactory.cs
- CollectionBase.cs
- WhitespaceRuleLookup.cs
- Speller.cs
- GridViewSortEventArgs.cs
- ReliabilityContractAttribute.cs
- Assert.cs
- X509UI.cs
- TokenBasedSet.cs
- XmlDocument.cs
- ImageList.cs
- CryptoKeySecurity.cs
- SqlUtil.cs
- Signature.cs
- SafeEventLogWriteHandle.cs
- NotCondition.cs
- CellParaClient.cs
- EntityModelSchemaGenerator.cs
- WinEventHandler.cs
- StylusCollection.cs
- XomlCompilerError.cs
- BitmapEffectDrawing.cs
- AxisAngleRotation3D.cs
- Semaphore.cs
- XmlAttributeCollection.cs
- XmlSiteMapProvider.cs
- SqlSelectClauseBuilder.cs
- EventMappingSettingsCollection.cs
- HttpsTransportElement.cs
- DataSetViewSchema.cs
- ReadOnlyCollection.cs
- InputMethodStateTypeInfo.cs
- ItemsPanelTemplate.cs
- uribuilder.cs
- InputScope.cs