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
- ClientScriptManagerWrapper.cs
- ParallelLoopState.cs
- RoutedPropertyChangedEventArgs.cs
- Zone.cs
- EventLog.cs
- Misc.cs
- SchemaMapping.cs
- HostedBindingBehavior.cs
- OleDbPropertySetGuid.cs
- ApplicationManager.cs
- SqlFactory.cs
- SqlMethodTransformer.cs
- OutputWindow.cs
- ReadWriteObjectLock.cs
- log.cs
- WinFormsSecurity.cs
- PriorityQueue.cs
- SqlNodeAnnotation.cs
- Point4D.cs
- RecordBuilder.cs
- ContentType.cs
- SurrogateSelector.cs
- OwnerDrawPropertyBag.cs
- SqlCharStream.cs
- CodeGroup.cs
- ComplexType.cs
- PeerNameResolver.cs
- SizeAnimationClockResource.cs
- SecurityContext.cs
- ListDictionaryInternal.cs
- FontStretches.cs
- MediaScriptCommandRoutedEventArgs.cs
- EntitySet.cs
- HostingEnvironment.cs
- BindingsCollection.cs
- LateBoundBitmapDecoder.cs
- InputProcessorProfilesLoader.cs
- TriggerCollection.cs
- UpdateRecord.cs
- PartDesigner.cs
- AssemblyFilter.cs
- AutomationProperty.cs
- XmlValidatingReader.cs
- X509Chain.cs
- TimeoutValidationAttribute.cs
- ColorTranslator.cs
- CategoryValueConverter.cs
- TypeName.cs
- SiteIdentityPermission.cs
- ColumnCollection.cs
- NavigateEvent.cs
- WebPartZone.cs
- FullTextBreakpoint.cs
- DocumentSchemaValidator.cs
- ObjectItemNoOpAssemblyLoader.cs
- ToolStripOverflow.cs
- UpdateExpressionVisitor.cs
- HttpChannelBindingToken.cs
- BackgroundWorker.cs
- XmlNodeChangedEventManager.cs
- FontInfo.cs
- Camera.cs
- ValueQuery.cs
- EntityClassGenerator.cs
- EntityAdapter.cs
- WinFormsComponentEditor.cs
- XmlFormatWriterGenerator.cs
- InputLanguageCollection.cs
- QuaternionAnimation.cs
- TdsParserSessionPool.cs
- DesignerActionItem.cs
- WebScriptEnablingElement.cs
- OperationCanceledException.cs
- propertytag.cs
- TypedReference.cs
- DrawingServices.cs
- WebPartPersonalization.cs
- SaveLedgerEntryRequest.cs
- BroadcastEventHelper.cs
- ProfileSection.cs
- StyleCollection.cs
- InstanceCreationEditor.cs
- DragDropManager.cs
- RegistryPermission.cs
- JavaScriptSerializer.cs
- ScriptModule.cs
- GlobalizationSection.cs
- DoubleAnimationBase.cs
- ProfileEventArgs.cs
- XmlDataSourceView.cs
- ObjectItemNoOpAssemblyLoader.cs
- WindowsProgressbar.cs
- ServiceHttpHandlerFactory.cs
- TreeViewDataItemAutomationPeer.cs
- TextTreeFixupNode.cs
- WebPartMenu.cs
- DesignerAttribute.cs
- Memoizer.cs
- DataGridCommandEventArgs.cs
- CapabilitiesState.cs