Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- MLangCodePageEncoding.cs
- AnnotationService.cs
- TableTextElementCollectionInternal.cs
- DataSourceGroupCollection.cs
- DropDownButton.cs
- HwndTarget.cs
- SHA384Managed.cs
- FormattedText.cs
- ListManagerBindingsCollection.cs
- ModelPropertyDescriptor.cs
- SvcMapFileSerializer.cs
- PreviousTrackingServiceAttribute.cs
- TypeElementCollection.cs
- UseManagedPresentationElement.cs
- ControlFilterExpression.cs
- UserUseLicenseDictionaryLoader.cs
- GeneralTransform3DTo2DTo3D.cs
- ObfuscateAssemblyAttribute.cs
- SeverityFilter.cs
- XmlLoader.cs
- WindowsMenu.cs
- TileModeValidation.cs
- DocumentsTrace.cs
- SmtpLoginAuthenticationModule.cs
- DesignOnlyAttribute.cs
- Directory.cs
- BinaryUtilClasses.cs
- DataGridViewDataErrorEventArgs.cs
- DocumentCollection.cs
- DataGridViewColumnCollection.cs
- HtmlTable.cs
- DiscreteKeyFrames.cs
- BamlReader.cs
- TabletDeviceInfo.cs
- ConsoleKeyInfo.cs
- PropertyTab.cs
- FileDataSourceCache.cs
- CmsInterop.cs
- DebugView.cs
- TextContainerHelper.cs
- TextBlock.cs
- MessageQueueKey.cs
- DurableInstance.cs
- BooleanAnimationUsingKeyFrames.cs
- LiteralControl.cs
- X509UI.cs
- _NetworkingPerfCounters.cs
- StreamInfo.cs
- LogArchiveSnapshot.cs
- DesignerView.cs
- MultipleViewProviderWrapper.cs
- SafeNativeMethods.cs
- ChtmlMobileTextWriter.cs
- SoapTransportImporter.cs
- SqlMethodCallConverter.cs
- MulticastDelegate.cs
- FormView.cs
- ArraySubsetEnumerator.cs
- ParameterCollection.cs
- GcSettings.cs
- OdbcConnectionStringbuilder.cs
- ItemChangedEventArgs.cs
- RecommendedAsConfigurableAttribute.cs
- BezierSegment.cs
- Brush.cs
- SystemIPInterfaceStatistics.cs
- NativeMethods.cs
- ClientData.cs
- MinimizableAttributeTypeConverter.cs
- DBConnection.cs
- ClientConfigurationSystem.cs
- MetaType.cs
- ConfigurationPermission.cs
- OleDbRowUpdatedEvent.cs
- COM2AboutBoxPropertyDescriptor.cs
- WebPartConnectionsCancelVerb.cs
- HitTestResult.cs
- IndexOutOfRangeException.cs
- compensatingcollection.cs
- UICuesEvent.cs
- AttributeCollection.cs
- DiscoveryDocumentReference.cs
- WebRequestModuleElement.cs
- UIElement.cs
- MemberDomainMap.cs
- ToolStripComboBox.cs
- MimeTypeAttribute.cs
- DynamicResourceExtensionConverter.cs
- OpenCollectionAsyncResult.cs
- DataGridViewComboBoxColumn.cs
- IndentedWriter.cs
- DataBoundControlActionList.cs
- Themes.cs
- AutoCompleteStringCollection.cs
- StylusPointPropertyId.cs
- ConfigXmlText.cs
- WebPartConnectionsCancelVerb.cs
- XD.cs
- StorageMappingFragment.cs
- GroupItem.cs