Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- TextRenderer.cs
- UIElement3D.cs
- ErrorWebPart.cs
- CursorConverter.cs
- XamlTypeMapper.cs
- NullableDecimalAverageAggregationOperator.cs
- SByte.cs
- XmlSchemaRedefine.cs
- StylusPlugin.cs
- MouseEvent.cs
- XappLauncher.cs
- ResXBuildProvider.cs
- _LocalDataStore.cs
- CryptoProvider.cs
- DynamicMetaObjectBinder.cs
- SQLInt64Storage.cs
- DesignerVerbCollection.cs
- IfAction.cs
- ProviderConnectionPoint.cs
- TableCell.cs
- BooleanToSelectiveScrollingOrientationConverter.cs
- SchemaImporterExtensionElementCollection.cs
- TextParaClient.cs
- InputBinder.cs
- _KerberosClient.cs
- InterleavedZipPartStream.cs
- cookie.cs
- SystemUnicastIPAddressInformation.cs
- CompilerErrorCollection.cs
- ItemDragEvent.cs
- JsonCollectionDataContract.cs
- Paragraph.cs
- InfoCardRSAPKCS1KeyExchangeFormatter.cs
- SiteMapNodeItem.cs
- Trigger.cs
- MediaTimeline.cs
- KeyEventArgs.cs
- CipherData.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- arc.cs
- CapabilitiesState.cs
- Base64Encoding.cs
- TokenBasedSetEnumerator.cs
- OutputScope.cs
- WindowsToolbarItemAsMenuItem.cs
- EncryptedType.cs
- InputLanguageManager.cs
- SymbolDocumentInfo.cs
- ApplicationInterop.cs
- HtmlDocument.cs
- BaseInfoTable.cs
- XmlSchemaDocumentation.cs
- GeneralTransform2DTo3DTo2D.cs
- TrackingValidationObjectDictionary.cs
- SqlNodeAnnotations.cs
- HttpDebugHandler.cs
- CheckBoxStandardAdapter.cs
- KeyGestureValueSerializer.cs
- NewArray.cs
- XmlTypeMapping.cs
- ConfigXmlWhitespace.cs
- XmlRawWriter.cs
- SoapSchemaMember.cs
- PointCollection.cs
- EventToken.cs
- ClientScriptManager.cs
- ThrowHelper.cs
- PrinterResolution.cs
- ControlParser.cs
- FreezableCollection.cs
- ContentTextAutomationPeer.cs
- Automation.cs
- ReachUIElementCollectionSerializerAsync.cs
- Track.cs
- SelectionPatternIdentifiers.cs
- HeaderCollection.cs
- NativeCompoundFileAPIs.cs
- JsonEncodingStreamWrapper.cs
- EmbeddedMailObject.cs
- TransportElement.cs
- StylusPointProperties.cs
- TableDetailsCollection.cs
- BoundsDrawingContextWalker.cs
- ToolStripItemImageRenderEventArgs.cs
- util.cs
- XmlWrappingReader.cs
- DuplexClientBase.cs
- MenuItemCollection.cs
- Effect.cs
- FileSecurity.cs
- KoreanCalendar.cs
- InternalEnumValidator.cs
- EditingCommands.cs
- ExpressionDumper.cs
- ResourcesBuildProvider.cs
- Span.cs
- NullExtension.cs
- SystemWebExtensionsSectionGroup.cs
- AssertFilter.cs
- Mouse.cs