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
- WebServiceData.cs
- ToolStripOverflow.cs
- UserMapPath.cs
- MorphHelper.cs
- ClaimTypes.cs
- LazyInitializer.cs
- Mutex.cs
- ParentUndoUnit.cs
- Assembly.cs
- DependencyProperty.cs
- UserNameSecurityToken.cs
- GetImportedCardRequest.cs
- CryptoHelper.cs
- RegexBoyerMoore.cs
- MultiView.cs
- TraceXPathNavigator.cs
- SmiTypedGetterSetter.cs
- Convert.cs
- GeneralTransform3DCollection.cs
- PriorityBindingExpression.cs
- safelink.cs
- Filter.cs
- KeyBinding.cs
- FileDialog_Vista.cs
- ParallelDesigner.cs
- AsyncWaitHandle.cs
- ServicesUtilities.cs
- SystemWebCachingSectionGroup.cs
- PasswordDeriveBytes.cs
- ChtmlImageAdapter.cs
- SqlCharStream.cs
- HtmlAnchor.cs
- ListChunk.cs
- ChtmlTextWriter.cs
- TransformPattern.cs
- NestedContainer.cs
- HandlerBase.cs
- EventLogPermissionHolder.cs
- CollectionDataContractAttribute.cs
- AssemblyHash.cs
- ToolStripSplitButton.cs
- CapabilitiesPattern.cs
- RegexRunnerFactory.cs
- CodeDirectiveCollection.cs
- CodeMethodInvokeExpression.cs
- Verify.cs
- PlatformNotSupportedException.cs
- TextServicesManager.cs
- PackagePartCollection.cs
- RemoveStoryboard.cs
- ScaleTransform3D.cs
- RadioButtonList.cs
- TableLayoutRowStyleCollection.cs
- XmlWriterTraceListener.cs
- AutoResizedEvent.cs
- DataColumnPropertyDescriptor.cs
- EditorAttribute.cs
- AssociationSetEnd.cs
- XamlSerializerUtil.cs
- NullNotAllowedCollection.cs
- ProfileSection.cs
- Tile.cs
- EntityPropertyMappingAttribute.cs
- OdbcConnection.cs
- MemoryStream.cs
- SystemDiagnosticsSection.cs
- PassportPrincipal.cs
- DropShadowEffect.cs
- DataMemberFieldEditor.cs
- ProfessionalColorTable.cs
- ModuleBuilderData.cs
- FileChangesMonitor.cs
- StaticTextPointer.cs
- UInt64.cs
- Resources.Designer.cs
- OleDbPermission.cs
- KoreanLunisolarCalendar.cs
- SmiMetaDataProperty.cs
- ArraySortHelper.cs
- FilterQueryOptionExpression.cs
- EpmSourceTree.cs
- AnnouncementInnerClientCD1.cs
- ListChangedEventArgs.cs
- ComponentChangedEvent.cs
- TextElementCollectionHelper.cs
- BufferedGraphics.cs
- Int32CollectionConverter.cs
- WindowsScroll.cs
- Monitor.cs
- SecurityTokenException.cs
- ImpersonationContext.cs
- CompositeDesignerAccessibleObject.cs
- UntypedNullExpression.cs
- ServiceBusyException.cs
- PropertyRecord.cs
- ApplicationCommands.cs
- ToolStripHighContrastRenderer.cs
- ScrollItemPattern.cs
- OdbcConnectionOpen.cs
- SoapExtensionTypeElement.cs