Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- diagnosticsswitches.cs
- DefinitionBase.cs
- Registry.cs
- DataServiceStreamProviderWrapper.cs
- ToolStripSplitStackLayout.cs
- PresentationSource.cs
- LookupBindingPropertiesAttribute.cs
- LocationFactory.cs
- PiiTraceSource.cs
- DLinqDataModelProvider.cs
- IEnumerable.cs
- RadioButton.cs
- CompilerGeneratedAttribute.cs
- BaseCodeDomTreeGenerator.cs
- StringDictionary.cs
- BamlMapTable.cs
- SystemColors.cs
- ParameterRefs.cs
- WebPartMenu.cs
- CngAlgorithm.cs
- GPRECTF.cs
- ControlAdapter.cs
- IconConverter.cs
- ObjectRef.cs
- Handle.cs
- OleDbDataAdapter.cs
- SerializationException.cs
- RenamedEventArgs.cs
- SystemTcpConnection.cs
- FloaterBaseParaClient.cs
- Image.cs
- ListenerAdaptersInstallComponent.cs
- MenuItemAutomationPeer.cs
- brushes.cs
- MailAddress.cs
- AssociationType.cs
- BitmapEffectGroup.cs
- WebPartEditorCancelVerb.cs
- RegularExpressionValidator.cs
- DataGridCell.cs
- CodeIdentifiers.cs
- Panel.cs
- ExeConfigurationFileMap.cs
- TypeInfo.cs
- XmlSignificantWhitespace.cs
- TreeBuilderXamlTranslator.cs
- FileChangesMonitor.cs
- _PooledStream.cs
- XmlIlVisitor.cs
- HtmlGenericControl.cs
- PeerEndPoint.cs
- InvalidPipelineStoreException.cs
- CommandDevice.cs
- AppliesToBehaviorDecisionTable.cs
- GridViewUpdateEventArgs.cs
- httpserverutility.cs
- SchemaElementLookUpTableEnumerator.cs
- QilReplaceVisitor.cs
- InternalConfigRoot.cs
- SendSecurityHeaderElement.cs
- SimpleWorkerRequest.cs
- LinqDataView.cs
- SerializerWriterEventHandlers.cs
- PlatformCulture.cs
- basecomparevalidator.cs
- WsdlExporter.cs
- DataServiceRequestOfT.cs
- RegionData.cs
- EasingFunctionBase.cs
- SizeFConverter.cs
- ServiceModelEnumValidator.cs
- PixelFormatConverter.cs
- WebPartRestoreVerb.cs
- InitiatorSessionSymmetricMessageSecurityProtocol.cs
- PersonalizationStateQuery.cs
- DesignerLoader.cs
- MenuCommandsChangedEventArgs.cs
- SqlMultiplexer.cs
- CrossAppDomainChannel.cs
- MouseGestureValueSerializer.cs
- ReadOnlyDictionary.cs
- ToolStripProgressBar.cs
- SoapCodeExporter.cs
- DmlSqlGenerator.cs
- AdornerHitTestResult.cs
- WorkflowServiceHost.cs
- EntitySqlQueryCacheKey.cs
- AssemblyFilter.cs
- TextModifier.cs
- RotationValidation.cs
- LogicalExpr.cs
- EnumerationRangeValidationUtil.cs
- ManifestSignatureInformation.cs
- ToolStripItemClickedEventArgs.cs
- InkCollectionBehavior.cs
- WebPartDescriptionCollection.cs
- ConfigurationPropertyAttribute.cs
- EndpointAddressMessageFilterTable.cs
- HttpResponseInternalWrapper.cs
- DbConnectionOptions.cs