Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Core / MS / Internal / FontCache / TypefaceMetricsCache.cs / 1 / TypefaceMetricsCache.cs
//---------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // Description: TypefaceMetricsCache // // History: 5-25-2005 [....], 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PersonalizableTypeEntry.cs
- ProvideValueServiceProvider.cs
- DataGridViewCellLinkedList.cs
- ToolStripDesigner.cs
- IProvider.cs
- VirtualizingPanel.cs
- FilterQuery.cs
- PageRequestManager.cs
- EntityDataSourceQueryBuilder.cs
- ListViewGroup.cs
- MouseActionConverter.cs
- State.cs
- LongValidatorAttribute.cs
- SqlExpressionNullability.cs
- BamlRecordReader.cs
- Vector3DCollection.cs
- ConvertTextFrag.cs
- ToolStripItemClickedEventArgs.cs
- OdbcConnectionOpen.cs
- BindingRestrictions.cs
- OleDbPermission.cs
- _CacheStreams.cs
- ConfigurationStrings.cs
- AppDomainGrammarProxy.cs
- PhysicalAddress.cs
- ArgumentOutOfRangeException.cs
- ErrorHandlingReceiver.cs
- DataColumnPropertyDescriptor.cs
- RegionData.cs
- Constraint.cs
- StateChangeEvent.cs
- Container.cs
- Common.cs
- WizardStepCollectionEditor.cs
- SiteMapProvider.cs
- OperatorExpressions.cs
- WindowsIdentity.cs
- DirtyTextRange.cs
- CompressionTracing.cs
- BidOverLoads.cs
- CultureInfo.cs
- ResumeStoryboard.cs
- ExceptionHandlers.cs
- oledbconnectionstring.cs
- Visual.cs
- BinaryConverter.cs
- Accessors.cs
- SqlVersion.cs
- TrackBarRenderer.cs
- View.cs
- HitTestFilterBehavior.cs
- SafeNativeMethods.cs
- NotifyIcon.cs
- Contracts.cs
- BuildManager.cs
- WindowsFormsLinkLabel.cs
- TraceLog.cs
- TypeValidationEventArgs.cs
- ClientEventManager.cs
- ComAdminInterfaces.cs
- TransformDescriptor.cs
- CodeAssignStatement.cs
- PagedDataSource.cs
- DataGridViewColumnCollection.cs
- UTF7Encoding.cs
- CodeCompileUnit.cs
- DragEventArgs.cs
- ShaderEffect.cs
- CompilerParameters.cs
- CustomActivityDesigner.cs
- Attribute.cs
- SqlGenericUtil.cs
- ClientTarget.cs
- TableRowCollection.cs
- ListViewInsertEventArgs.cs
- BatchServiceHost.cs
- FixedSOMFixedBlock.cs
- ClientScriptManager.cs
- ValidatingPropertiesEventArgs.cs
- COM2ExtendedUITypeEditor.cs
- WindowsFormsLinkLabel.cs
- ControlCollection.cs
- EventsTab.cs
- XmlSchemaInferenceException.cs
- DefaultSettingsSection.cs
- DocumentXmlWriter.cs
- TextBoxRenderer.cs
- AnonymousIdentificationModule.cs
- SchemaElementDecl.cs
- HttpServerVarsCollection.cs
- ResourceExpressionBuilder.cs
- XmlElementAttributes.cs
- ServiceDescriptionData.cs
- TypeConverterAttribute.cs
- TableHeaderCell.cs
- Material.cs
- TextEditor.cs
- HtmlGenericControl.cs
- PackageDocument.cs
- ResourceDictionary.cs