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
- selecteditemcollection.cs
- DoubleLink.cs
- SystemColors.cs
- TypeCollectionDesigner.xaml.cs
- Annotation.cs
- ResolvedKeyFrameEntry.cs
- XmlSerializerVersionAttribute.cs
- TextRangeEdit.cs
- UseLicense.cs
- SQLMembershipProvider.cs
- EncodingDataItem.cs
- CodeGeneratorOptions.cs
- CharConverter.cs
- SchemaMapping.cs
- XmlSchemaCompilationSettings.cs
- StorageInfo.cs
- DnsPermission.cs
- ControlCodeDomSerializer.cs
- ConstantSlot.cs
- XmlAttributeOverrides.cs
- CoreSwitches.cs
- DisableDpiAwarenessAttribute.cs
- CustomWebEventKey.cs
- EntitySetBase.cs
- ToolStripDropTargetManager.cs
- PartialClassGenerationTaskInternal.cs
- XmlName.cs
- Context.cs
- WebContext.cs
- DatatypeImplementation.cs
- ToolStripButton.cs
- ToggleProviderWrapper.cs
- Profiler.cs
- NumberSubstitution.cs
- MsmqHostedTransportConfiguration.cs
- SyntaxCheck.cs
- ToolboxComponentsCreatingEventArgs.cs
- XslTransformFileEditor.cs
- CompensationTokenData.cs
- ReturnValue.cs
- SpecialNameAttribute.cs
- ParsedAttributeCollection.cs
- CharConverter.cs
- AsymmetricSignatureFormatter.cs
- SslStream.cs
- FaultDescription.cs
- IIS7WorkerRequest.cs
- State.cs
- SmiXetterAccessMap.cs
- StateFinalizationDesigner.cs
- versioninfo.cs
- SystemInfo.cs
- BuildManagerHost.cs
- PerfService.cs
- HierarchicalDataTemplate.cs
- AcceptorSessionSymmetricMessageSecurityProtocol.cs
- MessageEncodingBindingElementImporter.cs
- URLString.cs
- ImplicitInputBrush.cs
- FormsAuthenticationEventArgs.cs
- LoginName.cs
- ButtonRenderer.cs
- COM2PictureConverter.cs
- SqlMethodTransformer.cs
- Thickness.cs
- WebPartCatalogAddVerb.cs
- FixedTextContainer.cs
- DrawingImage.cs
- DelayedRegex.cs
- RangeBase.cs
- ByteStreamMessageUtility.cs
- RelationshipConstraintValidator.cs
- ConfigurationLockCollection.cs
- GroupLabel.cs
- HandleCollector.cs
- TabControl.cs
- CodeDOMProvider.cs
- MSAAWinEventWrap.cs
- DistributedTransactionPermission.cs
- ChoiceConverter.cs
- XomlCompiler.cs
- FixedTextContainer.cs
- CompatibleIComparer.cs
- NumberEdit.cs
- KeysConverter.cs
- GridItemPattern.cs
- CodeCatchClauseCollection.cs
- SqlCachedBuffer.cs
- LocatorPartList.cs
- DataGridHeaderBorder.cs
- IUnknownConstantAttribute.cs
- Bitmap.cs
- PrimitiveType.cs
- Configuration.cs
- SamlSubject.cs
- BindingCompleteEventArgs.cs
- DataGridViewSelectedColumnCollection.cs
- DispatchChannelSink.cs
- CellTreeNode.cs
- EdmProviderManifest.cs