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
- ArrangedElementCollection.cs
- OrderPreservingPipeliningMergeHelper.cs
- ImageAttributes.cs
- ConfigurationValidatorBase.cs
- XamlFilter.cs
- Expr.cs
- XmlUrlResolver.cs
- _AuthenticationState.cs
- _RequestCacheProtocol.cs
- ToolboxItemCollection.cs
- JsonFormatWriterGenerator.cs
- DnsCache.cs
- QilLiteral.cs
- PriorityRange.cs
- ReservationCollection.cs
- SaveFileDialog.cs
- SymLanguageType.cs
- Relationship.cs
- _ListenerRequestStream.cs
- CodeLinePragma.cs
- XmlHelper.cs
- ComponentSerializationService.cs
- WebPartZone.cs
- BindingNavigatorDesigner.cs
- FlowPosition.cs
- ToolStripGrip.cs
- InputProcessorProfiles.cs
- ReadOnlyNameValueCollection.cs
- NavigationPropertyAccessor.cs
- TextShapeableCharacters.cs
- GridSplitterAutomationPeer.cs
- X509UI.cs
- Separator.cs
- SafeNativeMemoryHandle.cs
- SQLGuid.cs
- Error.cs
- TextDecorations.cs
- XmlHierarchicalEnumerable.cs
- xdrvalidator.cs
- TransactionException.cs
- EmptyCollection.cs
- InfoCardRSAOAEPKeyExchangeDeformatter.cs
- ErrorsHelper.cs
- DocumentGrid.cs
- NativeRightsManagementAPIsStructures.cs
- XmlSchemaParticle.cs
- AssemblyCollection.cs
- OdbcReferenceCollection.cs
- EventHandlersStore.cs
- AdornerPresentationContext.cs
- TextEditorMouse.cs
- SamlAudienceRestrictionCondition.cs
- QilScopedVisitor.cs
- PrivateFontCollection.cs
- ItemCollection.cs
- RegexStringValidatorAttribute.cs
- ExecutionEngineException.cs
- CompositeFontFamily.cs
- DateTimeConverter.cs
- NamespaceInfo.cs
- DataServiceQueryContinuation.cs
- InputChannelAcceptor.cs
- RangeValidator.cs
- CatalogZoneBase.cs
- XmlUtf8RawTextWriter.cs
- XmlHierarchyData.cs
- IncrementalCompileAnalyzer.cs
- ExpressionBindingsDialog.cs
- UserControl.cs
- DataGridViewSelectedRowCollection.cs
- SafeEventLogReadHandle.cs
- LambdaCompiler.Lambda.cs
- BaseProcessor.cs
- ProfileBuildProvider.cs
- CodeGenerator.cs
- util.cs
- ExpandedWrapper.cs
- Roles.cs
- ConfigDefinitionUpdates.cs
- BufferedGraphicsManager.cs
- FixedSOMTextRun.cs
- PrivateFontCollection.cs
- FixedSOMElement.cs
- WebBaseEventKeyComparer.cs
- RelatedCurrencyManager.cs
- TreePrinter.cs
- DataSourceControl.cs
- webeventbuffer.cs
- QilTypeChecker.cs
- XPathBinder.cs
- PhysicalFontFamily.cs
- ReliableChannelBinder.cs
- Boolean.cs
- SessionEndedEventArgs.cs
- WindowsToolbarItemAsMenuItem.cs
- HttpCapabilitiesBase.cs
- ToolStripContentPanel.cs
- safelink.cs
- IndexOutOfRangeException.cs
- AnnotationResourceChangedEventArgs.cs