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
- ProcessHostMapPath.cs
- TableRowGroup.cs
- PasswordPropertyTextAttribute.cs
- CallId.cs
- SrgsElementFactoryCompiler.cs
- SvcMapFileSerializer.cs
- Properties.cs
- KeyboardEventArgs.cs
- DmlSqlGenerator.cs
- TextCompositionEventArgs.cs
- NotifyIcon.cs
- BindableAttribute.cs
- DockPanel.cs
- PassportPrincipal.cs
- SmtpReplyReader.cs
- SettingsAttributeDictionary.cs
- NonDualMessageSecurityOverHttpElement.cs
- SamlAssertionKeyIdentifierClause.cs
- LOSFormatter.cs
- PrintDialogDesigner.cs
- Keyboard.cs
- QuaternionAnimationBase.cs
- CommonObjectSecurity.cs
- ConditionalDesigner.cs
- XmlWhitespace.cs
- ObjectViewFactory.cs
- DesignerGeometryHelper.cs
- TextEndOfLine.cs
- SessionIDManager.cs
- ListBoxAutomationPeer.cs
- ParagraphResult.cs
- DataGridHeaderBorder.cs
- ControlPropertyNameConverter.cs
- DbSetClause.cs
- RoutedEventArgs.cs
- PermissionToken.cs
- DataObjectCopyingEventArgs.cs
- AuthenticationModulesSection.cs
- EditorPartCollection.cs
- SettingsProviderCollection.cs
- ImageField.cs
- QilInvokeLateBound.cs
- Queue.cs
- UnsafeNativeMethods.cs
- ColumnWidthChangingEvent.cs
- StatusBarDrawItemEvent.cs
- DesignSurfaceManager.cs
- storepermission.cs
- Misc.cs
- ScrollChrome.cs
- StringToken.cs
- PrimitiveList.cs
- ToolStripDropTargetManager.cs
- AssemblyBuilder.cs
- ServiceProviders.cs
- TemplatedAdorner.cs
- DependencyPropertyHelper.cs
- ObjectAnimationBase.cs
- ExecutionEngineException.cs
- TextShapeableCharacters.cs
- SettingsPropertyNotFoundException.cs
- DoubleCollection.cs
- PageWrapper.cs
- WebBrowsableAttribute.cs
- RightsManagementUser.cs
- SqlTrackingService.cs
- DistinctQueryOperator.cs
- InputReport.cs
- HuffCodec.cs
- EncoderBestFitFallback.cs
- PageAsyncTask.cs
- MediaPlayerState.cs
- SqlMethodAttribute.cs
- OutOfMemoryException.cs
- SerialPort.cs
- OleDbConnection.cs
- SessionStateSection.cs
- XamlTemplateSerializer.cs
- IndexExpression.cs
- KeyValuePairs.cs
- FreezableOperations.cs
- EncoderParameters.cs
- wpf-etw.cs
- MemberMaps.cs
- WebPartHeaderCloseVerb.cs
- DiscreteKeyFrames.cs
- PrintDialog.cs
- AssemblyAssociatedContentFileAttribute.cs
- XmlILAnnotation.cs
- JsonWriter.cs
- DropShadowEffect.cs
- HtmlInputReset.cs
- DataGridCell.cs
- BaseValidator.cs
- ByteArrayHelperWithString.cs
- ZipIORawDataFileBlock.cs
- DataGridViewHeaderCell.cs
- XPathParser.cs
- ObjectPropertyMapping.cs
- SubstitutionList.cs