Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- NodeLabelEditEvent.cs
- WhitespaceRule.cs
- XmlSchemaSimpleTypeRestriction.cs
- Double.cs
- QuadraticBezierSegment.cs
- CollectionExtensions.cs
- SamlAssertion.cs
- SafeSystemMetrics.cs
- StrongTypingException.cs
- PopOutPanel.cs
- Parameter.cs
- DesignerExtenders.cs
- CommandManager.cs
- ActiveXHelper.cs
- TaiwanLunisolarCalendar.cs
- CryptoApi.cs
- _CommandStream.cs
- StreamUpgradeProvider.cs
- SerializationStore.cs
- New.cs
- PageStatePersister.cs
- AssemblyUtil.cs
- PeerPresenceInfo.cs
- ParenthesizePropertyNameAttribute.cs
- PassportPrincipal.cs
- DataReceivedEventArgs.cs
- XmlWellformedWriter.cs
- EntityDataReader.cs
- ButtonColumn.cs
- CompilerWrapper.cs
- UInt32.cs
- ConfigurationSchemaErrors.cs
- PingOptions.cs
- TableProviderWrapper.cs
- SemanticResolver.cs
- TableProviderWrapper.cs
- DateTimeOffsetAdapter.cs
- TripleDES.cs
- XmlComment.cs
- DefinitionBase.cs
- WebHttpBehavior.cs
- XmlSerializerFactory.cs
- Rect3D.cs
- AccessViolationException.cs
- SerializationAttributes.cs
- ToolStripItemDataObject.cs
- AttachedPropertyMethodSelector.cs
- SetState.cs
- SafeFileHandle.cs
- BitVector32.cs
- OrderedEnumerableRowCollection.cs
- XmlSchemaAny.cs
- RangeValueProviderWrapper.cs
- BindingExpressionUncommonField.cs
- Content.cs
- RegularExpressionValidator.cs
- ColorDialog.cs
- CustomWebEventKey.cs
- CodeDesigner.cs
- Rectangle.cs
- TableRow.cs
- CharEntityEncoderFallback.cs
- MeshGeometry3D.cs
- TrackBarDesigner.cs
- BamlRecordWriter.cs
- ManipulationBoundaryFeedbackEventArgs.cs
- ListBox.cs
- Metafile.cs
- Grant.cs
- TextEditorThreadLocalStore.cs
- ImpersonationContext.cs
- AnnotationObservableCollection.cs
- ExtendedPropertyDescriptor.cs
- ProgressChangedEventArgs.cs
- DelegateInArgument.cs
- LifetimeServices.cs
- QilCloneVisitor.cs
- XmlAnyAttributeAttribute.cs
- SqlRetyper.cs
- FrameworkContentElement.cs
- UserControlParser.cs
- InheritanceAttribute.cs
- TypeInfo.cs
- ThreadLocal.cs
- PackWebResponse.cs
- EntityTransaction.cs
- XmlHelper.cs
- Schema.cs
- Int16AnimationUsingKeyFrames.cs
- StrokeDescriptor.cs
- ToolboxControl.cs
- DelayedRegex.cs
- UnsafeNativeMethods.cs
- MemberPath.cs
- PenCursorManager.cs
- PagerSettings.cs
- RubberbandSelector.cs
- CheckBoxFlatAdapter.cs
- PositiveTimeSpanValidatorAttribute.cs
- LinqDataSourceDeleteEventArgs.cs