Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- OutOfMemoryException.cs
- CachedPathData.cs
- ProfileServiceManager.cs
- PropertyIDSet.cs
- FlowDocumentPaginator.cs
- CodeTypeParameterCollection.cs
- XmlArrayAttribute.cs
- TransformedBitmap.cs
- ScriptingProfileServiceSection.cs
- OleDbCommand.cs
- FunctionCommandText.cs
- XmlSchemaSubstitutionGroup.cs
- Material.cs
- XmlBindingWorker.cs
- VScrollProperties.cs
- EpmTargetTree.cs
- MutexSecurity.cs
- TimerExtension.cs
- SqlAliasesReferenced.cs
- GenericPrincipal.cs
- DocumentApplication.cs
- MailBnfHelper.cs
- ScriptingWebServicesSectionGroup.cs
- XmlSchemaIdentityConstraint.cs
- ConsumerConnectionPointCollection.cs
- ListParaClient.cs
- FtpWebResponse.cs
- GPPOINTF.cs
- PropertyDescriptor.cs
- StateValidator.cs
- CheckPair.cs
- ActivityInfo.cs
- FlowDocumentView.cs
- ReadOnlyObservableCollection.cs
- EastAsianLunisolarCalendar.cs
- BuilderPropertyEntry.cs
- RuleConditionDialog.cs
- DefaultHttpHandler.cs
- OracleCommand.cs
- XmlSerializerNamespaces.cs
- AssemblyBuilderData.cs
- PermissionSetEnumerator.cs
- OrderedDictionaryStateHelper.cs
- XmlCharCheckingReader.cs
- HwndTarget.cs
- SecurityManager.cs
- RewritingSimplifier.cs
- Int16KeyFrameCollection.cs
- SubclassTypeValidator.cs
- PagedDataSource.cs
- KeyNotFoundException.cs
- AssemblyCacheEntry.cs
- Switch.cs
- IFlowDocumentViewer.cs
- XslTransform.cs
- CallContext.cs
- RewritingSimplifier.cs
- ProviderUtil.cs
- HttpGetClientProtocol.cs
- TransformCollection.cs
- MobileControlBuilder.cs
- WebEvents.cs
- PropertyInformationCollection.cs
- PointCollectionConverter.cs
- ItemDragEvent.cs
- DocumentPageTextView.cs
- VisualBasicSettingsHandler.cs
- ListViewSortEventArgs.cs
- CompiledRegexRunnerFactory.cs
- ContentOperations.cs
- WebPartDisplayModeCollection.cs
- TraceInternal.cs
- DrawingContext.cs
- MemberAccessException.cs
- RoutedPropertyChangedEventArgs.cs
- SEHException.cs
- SerializationInfoEnumerator.cs
- ElementsClipboardData.cs
- TraceListeners.cs
- TemplateControlCodeDomTreeGenerator.cs
- OptimizedTemplateContentHelper.cs
- SiteMapNodeItem.cs
- OleAutBinder.cs
- ControlHelper.cs
- ContainerParagraph.cs
- WebServiceClientProxyGenerator.cs
- NameValueConfigurationCollection.cs
- FileDialogCustomPlace.cs
- DesignTimeValidationFeature.cs
- PathFigureCollection.cs
- BlurEffect.cs
- Brushes.cs
- OrderedDictionaryStateHelper.cs
- Effect.cs
- RolePrincipal.cs
- CodeArrayIndexerExpression.cs
- TrustManagerMoreInformation.cs
- SaveWorkflowCommand.cs
- InternalPolicyElement.cs
- FileChangesMonitor.cs