Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Core / CSharp / MS / Internal / FontCache / TypefaceMetricsCache.cs / 1 / 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
- SqlCacheDependencyDatabase.cs
- MailHeaderInfo.cs
- ToolStripComboBox.cs
- DataMisalignedException.cs
- OptimalTextSource.cs
- AttributeCollection.cs
- _LazyAsyncResult.cs
- QualifiedCellIdBoolean.cs
- WebPartHelpVerb.cs
- documentsequencetextcontainer.cs
- EncryptedPackageFilter.cs
- TargetControlTypeAttribute.cs
- CapabilitiesState.cs
- DisplayInformation.cs
- HuffModule.cs
- MultipleViewProviderWrapper.cs
- XXXOnTypeBuilderInstantiation.cs
- WinFormsComponentEditor.cs
- ManifestSignedXml.cs
- CharacterHit.cs
- RegisteredDisposeScript.cs
- PropertySegmentSerializer.cs
- _HTTPDateParse.cs
- PromptStyle.cs
- IfElseDesigner.xaml.cs
- EdgeModeValidation.cs
- SiteMapNodeCollection.cs
- ServiceParser.cs
- TemplateBindingExpressionConverter.cs
- WebPartZone.cs
- ScriptModule.cs
- JournalNavigationScope.cs
- RelationshipEndCollection.cs
- DirtyTextRange.cs
- XmlStreamStore.cs
- CodeLabeledStatement.cs
- FormCollection.cs
- HitTestWithGeometryDrawingContextWalker.cs
- AssociatedControlConverter.cs
- PersonalizationDictionary.cs
- NaturalLanguageHyphenator.cs
- KeyEventArgs.cs
- DependencyPropertyConverter.cs
- tibetanshape.cs
- OwnerDrawPropertyBag.cs
- CommonDialog.cs
- Panel.cs
- HWStack.cs
- SqlException.cs
- Socket.cs
- SystemPens.cs
- CriticalHandle.cs
- InfoCardX509Validator.cs
- SerializerWriterEventHandlers.cs
- ListDictionary.cs
- ApplicationId.cs
- PersonalizationStateQuery.cs
- HashHelper.cs
- SrgsOneOf.cs
- ApplicationManager.cs
- SqlDeflator.cs
- BamlTreeNode.cs
- DbSourceCommand.cs
- DesigntimeLicenseContext.cs
- MaskInputRejectedEventArgs.cs
- TabItemAutomationPeer.cs
- PreviewPrintController.cs
- RadioButton.cs
- ActivityExecutionContextCollection.cs
- SessionEndedEventArgs.cs
- ResourceReferenceKeyNotFoundException.cs
- HandleExceptionArgs.cs
- EventEntry.cs
- DesignTimeTemplateParser.cs
- OutputCacheSettingsSection.cs
- CheckBox.cs
- NullableBoolConverter.cs
- SecurityContext.cs
- HttpDictionary.cs
- FixedSOMLineRanges.cs
- ObjectMemberMapping.cs
- WindowsListViewItemCheckBox.cs
- OLEDB_Util.cs
- coordinator.cs
- ParseNumbers.cs
- IntegerValidatorAttribute.cs
- PolyLineSegment.cs
- ScrollItemPatternIdentifiers.cs
- SingleResultAttribute.cs
- ExpressionBuilderCollection.cs
- InheritanceAttribute.cs
- WpfXamlLoader.cs
- RemotingException.cs
- TextRangeProviderWrapper.cs
- SafeWaitHandle.cs
- RowSpanVector.cs
- ExecutionEngineException.cs
- XPathNode.cs
- ControllableStoryboardAction.cs
- OleTxTransaction.cs