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
- GridItemPatternIdentifiers.cs
- DeflateEmulationStream.cs
- SchemaMerger.cs
- UITypeEditor.cs
- Activity.cs
- DesignTable.cs
- ObjectResult.cs
- TransformerTypeCollection.cs
- WindowsScrollBar.cs
- TraceEventCache.cs
- WebPartManagerInternals.cs
- ReadOnlyObservableCollection.cs
- ConfigXmlWhitespace.cs
- SystemWebSectionGroup.cs
- TransformerInfoCollection.cs
- MultiView.cs
- ReadOnlyHierarchicalDataSourceView.cs
- QueryPageSettingsEventArgs.cs
- Pool.cs
- VariableQuery.cs
- XmlSchemaDatatype.cs
- TcpDuplicateContext.cs
- CompensationTokenData.cs
- MarkupProperty.cs
- Policy.cs
- PersonalizationState.cs
- PageBuildProvider.cs
- ResXResourceReader.cs
- LinqDataSourceDisposeEventArgs.cs
- ResourcePermissionBaseEntry.cs
- CacheDependency.cs
- OdbcStatementHandle.cs
- StaticTextPointer.cs
- LoginCancelEventArgs.cs
- RuntimeHelpers.cs
- ParameterCollection.cs
- FieldNameLookup.cs
- GroupBox.cs
- FastEncoder.cs
- WebPart.cs
- EnumConverter.cs
- EventBuilder.cs
- ReflectionUtil.cs
- SiteMapNodeCollection.cs
- ApplicationSecurityInfo.cs
- ValidationRuleCollection.cs
- ValidationSummary.cs
- SyndicationSerializer.cs
- CompiledRegexRunnerFactory.cs
- ControlOperationBehavior.cs
- CheckBoxRenderer.cs
- PeerUnsafeNativeCryptMethods.cs
- BeginEvent.cs
- SafeArrayTypeMismatchException.cs
- HttpListenerContext.cs
- SessionState.cs
- SafeThemeHandle.cs
- InstanceDataCollectionCollection.cs
- PackageRelationshipSelector.cs
- SimpleNameService.cs
- SQLDateTime.cs
- PlainXmlDeserializer.cs
- AsyncCompletedEventArgs.cs
- DllNotFoundException.cs
- SimpleRecyclingCache.cs
- ResourceReader.cs
- EntityProxyTypeInfo.cs
- AssemblyNameProxy.cs
- InputScopeAttribute.cs
- HTMLTagNameToTypeMapper.cs
- FormViewDesigner.cs
- DBSchemaRow.cs
- LiteralSubsegment.cs
- HeaderedItemsControl.cs
- GifBitmapEncoder.cs
- BufferedResponseStream.cs
- Padding.cs
- TypeToken.cs
- XamlTemplateSerializer.cs
- DataList.cs
- WebScriptClientGenerator.cs
- InternalDispatchObject.cs
- Int64Converter.cs
- SystemColors.cs
- TextEmbeddedObject.cs
- DataGridViewCheckBoxColumn.cs
- ServicePoint.cs
- AuthenticationConfig.cs
- HttpResponseBase.cs
- PriorityBinding.cs
- XComponentModel.cs
- BrowserCapabilitiesCompiler.cs
- TdsParserHelperClasses.cs
- SecurityCapabilities.cs
- MenuItemStyle.cs
- ToolStripMenuItem.cs
- ProcessHostFactoryHelper.cs
- ResourceKey.cs
- SpecialFolderEnumConverter.cs
- DeviceContext.cs