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
- RenameRuleObjectDialog.Designer.cs
- RefreshPropertiesAttribute.cs
- AssemblySettingAttributes.cs
- HttpRuntime.cs
- TextBox.cs
- MouseGestureConverter.cs
- IProvider.cs
- TransformValueSerializer.cs
- XmlEncodedRawTextWriter.cs
- TextEditorLists.cs
- EastAsianLunisolarCalendar.cs
- SynchronousReceiveElement.cs
- ExtenderProvidedPropertyAttribute.cs
- XmlSiteMapProvider.cs
- ButtonChrome.cs
- FontFamilyValueSerializer.cs
- NopReturnReader.cs
- MonikerProxyAttribute.cs
- Path.cs
- Matrix3DConverter.cs
- Matrix3DValueSerializer.cs
- MessageQueueAccessControlEntry.cs
- SrgsSemanticInterpretationTag.cs
- SelectionRange.cs
- ProtectedProviderSettings.cs
- SessionStateModule.cs
- ContourSegment.cs
- NativeMethods.cs
- StaticDataManager.cs
- MailWebEventProvider.cs
- URLAttribute.cs
- NamespaceInfo.cs
- DataExchangeServiceBinder.cs
- _FtpControlStream.cs
- HatchBrush.cs
- BitmapEffectState.cs
- VoiceSynthesis.cs
- Freezable.cs
- StorageTypeMapping.cs
- _StreamFramer.cs
- WebPartPersonalization.cs
- LocalsItemDescription.cs
- MsdtcClusterUtils.cs
- MaskedTextBox.cs
- HideDisabledControlAdapter.cs
- XmlWriter.cs
- BooleanFunctions.cs
- SortedDictionary.cs
- CapiSafeHandles.cs
- X500Name.cs
- DbConnectionFactory.cs
- DependencyObjectProvider.cs
- dataSvcMapFileLoader.cs
- Pts.cs
- TableLayoutPanelDesigner.cs
- WindowsStatic.cs
- CfgArc.cs
- pingexception.cs
- FrameworkElementFactoryMarkupObject.cs
- __Error.cs
- SystemFonts.cs
- SecurityPolicySection.cs
- DataGridViewCellPaintingEventArgs.cs
- ControlPropertyNameConverter.cs
- TagPrefixInfo.cs
- CodeTypeDeclaration.cs
- OwnerDrawPropertyBag.cs
- UrlAuthFailedErrorFormatter.cs
- BitmapFrameEncode.cs
- CustomErrorCollection.cs
- TickBar.cs
- DecimalStorage.cs
- ApplicationServicesHostFactory.cs
- SetIterators.cs
- Event.cs
- ClientConfigurationHost.cs
- DBSchemaRow.cs
- InstalledVoice.cs
- _TransmitFileOverlappedAsyncResult.cs
- PropertyEmitter.cs
- Parser.cs
- ConfigXmlComment.cs
- ControlCachePolicy.cs
- ExtenderControl.cs
- View.cs
- ReadOnlyNameValueCollection.cs
- TypeDelegator.cs
- TagPrefixInfo.cs
- ConstraintManager.cs
- UnhandledExceptionEventArgs.cs
- XmlSchemaAnnotated.cs
- Accessors.cs
- PolicyStatement.cs
- RefExpr.cs
- TableLayoutColumnStyleCollection.cs
- DrawItemEvent.cs
- ExpressionParser.cs
- CompositeTypefaceMetrics.cs
- MaterializeFromAtom.cs
- ArgumentNullException.cs