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
- DesignOnlyAttribute.cs
- WebPartCollection.cs
- DateTimeOffsetAdapter.cs
- XmlChildNodes.cs
- MatrixConverter.cs
- TableCellCollection.cs
- HttpHeaderCollection.cs
- WebPartVerbCollection.cs
- EmptyEnumerator.cs
- OuterGlowBitmapEffect.cs
- ResourceWriter.cs
- JavaScriptString.cs
- WeakReferenceKey.cs
- dataobject.cs
- PageAction.cs
- OdbcDataAdapter.cs
- WebSysDescriptionAttribute.cs
- TaskExtensions.cs
- MethodCallConverter.cs
- SecUtil.cs
- EventBindingService.cs
- TaskFormBase.cs
- PackageProperties.cs
- Vector.cs
- XmlDataImplementation.cs
- VariableQuery.cs
- CustomAttributeFormatException.cs
- XamlRtfConverter.cs
- X509IssuerSerialKeyIdentifierClause.cs
- ChangeBlockUndoRecord.cs
- Pointer.cs
- StringAnimationBase.cs
- FormViewCommandEventArgs.cs
- FocusWithinProperty.cs
- InputLanguageProfileNotifySink.cs
- ConfigurationStrings.cs
- AesManaged.cs
- PowerStatus.cs
- EntityDataSourceStatementEditorForm.cs
- ComEventsSink.cs
- AssemblyHash.cs
- RTLAwareMessageBox.cs
- TagPrefixInfo.cs
- FreezableDefaultValueFactory.cs
- EntityContainerRelationshipSet.cs
- _Rfc2616CacheValidators.cs
- PersonalizationEntry.cs
- PreProcessor.cs
- DirtyTextRange.cs
- CryptoStream.cs
- FrameworkContentElementAutomationPeer.cs
- SchemaRegistration.cs
- JoinGraph.cs
- ViewUtilities.cs
- MatrixAnimationUsingPath.cs
- CollectionBuilder.cs
- XmlValidatingReaderImpl.cs
- metadatamappinghashervisitor.cs
- FixedSchema.cs
- RuntimeEnvironment.cs
- MouseButton.cs
- RestHandlerFactory.cs
- HorizontalAlignConverter.cs
- ObjectConverter.cs
- HttpModuleAction.cs
- Paragraph.cs
- TextChangedEventArgs.cs
- VisualCollection.cs
- InplaceBitmapMetadataWriter.cs
- XhtmlBasicTextBoxAdapter.cs
- AssemblyBuilder.cs
- CodeRegionDirective.cs
- Int32CAMarshaler.cs
- WebPartConnectionsCancelVerb.cs
- RadioButton.cs
- TextRunTypographyProperties.cs
- ValidationSummaryDesigner.cs
- BitConverter.cs
- BlurEffect.cs
- SettingsPropertyWrongTypeException.cs
- ConfigurationManagerHelper.cs
- EtwTrackingParticipant.cs
- PowerStatus.cs
- Single.cs
- LocatorManager.cs
- ImageSourceValueSerializer.cs
- TableCellCollection.cs
- DataGridViewTextBoxCell.cs
- BaseResourcesBuildProvider.cs
- HttpDigestClientElement.cs
- Internal.cs
- JavaScriptString.cs
- DataTableClearEvent.cs
- TransformProviderWrapper.cs
- MeasureData.cs
- TaskFactory.cs
- OdbcParameter.cs
- MonthChangedEventArgs.cs
- EventLogQuery.cs
- TraceSource.cs