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
- VirtualPathUtility.cs
- DbConnectionPool.cs
- MenuItemStyleCollection.cs
- TrackingLocation.cs
- ThreadStartException.cs
- MissingFieldException.cs
- SmtpAuthenticationManager.cs
- TextRunCacheImp.cs
- CaseCqlBlock.cs
- ContainerSelectorActiveEvent.cs
- TextureBrush.cs
- EntityContainerRelationshipSetEnd.cs
- ThreadSafeList.cs
- ToolStripDesignerUtils.cs
- COM2DataTypeToManagedDataTypeConverter.cs
- PartialCachingAttribute.cs
- RegexInterpreter.cs
- JsonFaultDetail.cs
- ListSourceHelper.cs
- CodeTypeDelegate.cs
- CallSiteBinder.cs
- hresults.cs
- ControlBuilder.cs
- FieldAccessException.cs
- SchemaCollectionCompiler.cs
- StylusShape.cs
- GestureRecognizer.cs
- ConnectionStringsExpressionBuilder.cs
- Matrix3D.cs
- RegexTree.cs
- ScrollableControl.cs
- WebEventTraceProvider.cs
- FacetChecker.cs
- StyleReferenceConverter.cs
- WindowsPen.cs
- input.cs
- XmlNamedNodeMap.cs
- WebPartZoneCollection.cs
- ValidatorUtils.cs
- EmbossBitmapEffect.cs
- KeyValuePair.cs
- InvalidOperationException.cs
- CodeCommentStatement.cs
- Pkcs9Attribute.cs
- StringToken.cs
- NamespaceInfo.cs
- oledbmetadatacollectionnames.cs
- TableParaClient.cs
- WebPartConnectionsCloseVerb.cs
- WebHttpSecurityModeHelper.cs
- MessagingDescriptionAttribute.cs
- AttributeCollection.cs
- TableLayoutPanelCellPosition.cs
- invalidudtexception.cs
- PointCollection.cs
- LicenseException.cs
- SettingsContext.cs
- RolePrincipal.cs
- RichTextBox.cs
- DockPanel.cs
- DataReaderContainer.cs
- SerialReceived.cs
- Intellisense.cs
- TCEAdapterGenerator.cs
- CodeAccessPermission.cs
- EventLogLink.cs
- _ListenerRequestStream.cs
- WorkflowShape.cs
- FactoryGenerator.cs
- documentsequencetextview.cs
- FixedSchema.cs
- DomNameTable.cs
- HtmlShim.cs
- ConstNode.cs
- TypefaceCollection.cs
- WeakReference.cs
- BinaryReader.cs
- AuthenticatedStream.cs
- FileSystemWatcher.cs
- TrackingServices.cs
- SafePointer.cs
- XmlReaderSettings.cs
- CodeDomConfigurationHandler.cs
- DefaultAssemblyResolver.cs
- Triangle.cs
- VectorKeyFrameCollection.cs
- ServiceChannelProxy.cs
- RemotingConfigParser.cs
- CachingHintValidation.cs
- SqlFacetAttribute.cs
- WorkflowPersistenceService.cs
- GridViewPageEventArgs.cs
- MethodToken.cs
- PropertyGridEditorPart.cs
- NativeMethods.cs
- Range.cs
- EntityDataSourceDesigner.cs
- Normalization.cs
- CardSpaceException.cs
- ManagementDateTime.cs