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
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ACE.cs
- TypedElement.cs
- LinkArea.cs
- EntityDataSourceContextDisposingEventArgs.cs
- xmlsaver.cs
- SafeReadContext.cs
- ToolStripItemTextRenderEventArgs.cs
- TreeChangeInfo.cs
- Point3DCollectionValueSerializer.cs
- HttpValueCollection.cs
- CollectionContainer.cs
- CodeDOMUtility.cs
- FeatureSupport.cs
- UIElement3DAutomationPeer.cs
- AlternateView.cs
- SimplePropertyEntry.cs
- Component.cs
- CodeTypeMember.cs
- RefreshPropertiesAttribute.cs
- Symbol.cs
- EntityDataSourceDataSelectionPanel.designer.cs
- XmlSchemaNotation.cs
- ProgressChangedEventArgs.cs
- ResourceManagerWrapper.cs
- QueryInterceptorAttribute.cs
- IdentityReference.cs
- XmlObjectSerializerReadContext.cs
- TargetPerspective.cs
- SqlRemoveConstantOrderBy.cs
- Hex.cs
- OracleRowUpdatedEventArgs.cs
- WebPartDescription.cs
- HelpProvider.cs
- DataSysAttribute.cs
- OperationCanceledException.cs
- log.cs
- ProtocolsSection.cs
- LiteralText.cs
- UidManager.cs
- SqlGatherProducedAliases.cs
- EnumValAlphaComparer.cs
- RelOps.cs
- ZipIOBlockManager.cs
- Run.cs
- ItemsPanelTemplate.cs
- CodeTypeMemberCollection.cs
- coordinatorscratchpad.cs
- ToggleProviderWrapper.cs
- ComplexTypeEmitter.cs
- NumericPagerField.cs
- HwndSubclass.cs
- DecoratedNameAttribute.cs
- SerializationFieldInfo.cs
- ComplexObject.cs
- Setter.cs
- AttributeEmitter.cs
- KeyManager.cs
- WebPartEditorApplyVerb.cs
- WebBodyFormatMessageProperty.cs
- DrawingAttributes.cs
- WebPartZoneBase.cs
- CaseCqlBlock.cs
- SqlRemoveConstantOrderBy.cs
- UserControlFileEditor.cs
- JulianCalendar.cs
- EntitySqlException.cs
- ArgumentException.cs
- ScriptingSectionGroup.cs
- DistinctQueryOperator.cs
- TemplateManager.cs
- IndentTextWriter.cs
- SmtpNtlmAuthenticationModule.cs
- ColorConvertedBitmap.cs
- MobilePage.cs
- CommonDialog.cs
- X509CertificateChain.cs
- SqlRowUpdatingEvent.cs
- ChtmlTextWriter.cs
- EntityExpressionVisitor.cs
- EntityDataSourceUtil.cs
- DocumentXPathNavigator.cs
- StreamAsIStream.cs
- CatalogPartChrome.cs
- PenLineJoinValidation.cs
- CacheOutputQuery.cs
- DeadCharTextComposition.cs
- ApplicationSecurityManager.cs
- Identity.cs
- WorkflowOperationFault.cs
- JoinTreeSlot.cs
- MediaTimeline.cs
- SimpleTextLine.cs
- DefaultDialogButtons.cs
- Calendar.cs
- MobileDeviceCapabilitiesSectionHandler.cs
- CellConstant.cs
- DataGridViewColumnHeaderCell.cs
- EventHandlingScope.cs
- Material.cs
- ObjectStateEntryDbDataRecord.cs