Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Core / CSharp / MS / Internal / FontCache / TypefaceMetricsCache.cs / 1 / 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
- CustomExpression.cs
- DataControlCommands.cs
- ObjectStateFormatter.cs
- Label.cs
- AttachedProperty.cs
- HttpClientCertificate.cs
- XmlArrayItemAttributes.cs
- AsymmetricSignatureDeformatter.cs
- FontFamily.cs
- DodSequenceMerge.cs
- ContainerVisual.cs
- GiveFeedbackEvent.cs
- Control.cs
- WebPartRestoreVerb.cs
- XmlSerializerVersionAttribute.cs
- ProcessRequestAsyncResult.cs
- ValidationHelpers.cs
- CustomBindingCollectionElement.cs
- ItemCollection.cs
- Attachment.cs
- CertificateManager.cs
- Quaternion.cs
- Content.cs
- Transform.cs
- CheckedPointers.cs
- RawStylusInputReport.cs
- MailAddressCollection.cs
- SQLRoleProvider.cs
- XmlChoiceIdentifierAttribute.cs
- ScriptResourceAttribute.cs
- MediaPlayerState.cs
- RegexStringValidator.cs
- ZipIORawDataFileBlock.cs
- TagPrefixInfo.cs
- DataGridTextBoxColumn.cs
- ADConnectionHelper.cs
- SkipStoryboardToFill.cs
- ListViewUpdateEventArgs.cs
- _LocalDataStoreMgr.cs
- DataRelationCollection.cs
- ListView.cs
- MessagingActivityHelper.cs
- SolidColorBrush.cs
- PersonalizationProviderCollection.cs
- HtmlWindowCollection.cs
- DiscoveryDocumentSearchPattern.cs
- CodeCommentStatement.cs
- RegexCompilationInfo.cs
- WebServiceReceive.cs
- FontEmbeddingManager.cs
- ParseHttpDate.cs
- WebBrowserUriTypeConverter.cs
- FocusTracker.cs
- LinkConverter.cs
- MetadataArtifactLoaderCompositeFile.cs
- ConnectionString.cs
- mansign.cs
- WindowsEditBoxRange.cs
- ClientFormsIdentity.cs
- ActivationServices.cs
- DateTimeConstantAttribute.cs
- MimeMapping.cs
- PropertyStore.cs
- WsdlInspector.cs
- invalidudtexception.cs
- CaseStatementProjectedSlot.cs
- DescendantBaseQuery.cs
- Root.cs
- ContentDefinition.cs
- FormViewPagerRow.cs
- GeometryHitTestParameters.cs
- FactoryGenerator.cs
- SqlWebEventProvider.cs
- ControlBindingsCollection.cs
- PrincipalPermission.cs
- StreamSecurityUpgradeAcceptorAsyncResult.cs
- PrintEvent.cs
- CompositeControl.cs
- Site.cs
- AssertUtility.cs
- BrowsableAttribute.cs
- QueueProcessor.cs
- ZoneMembershipCondition.cs
- DataSourceSerializationException.cs
- AsymmetricSignatureDeformatter.cs
- DesignerActionHeaderItem.cs
- AddingNewEventArgs.cs
- MultiSelector.cs
- Material.cs
- CalloutQueueItem.cs
- StringAnimationUsingKeyFrames.cs
- MessageQueue.cs
- TypeUnloadedException.cs
- FailedToStartupUIException.cs
- ProfileService.cs
- XslAst.cs
- RelationshipConverter.cs
- APCustomTypeDescriptor.cs
- TemplateField.cs
- Site.cs