Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- SingleStorage.cs
- DisplayInformation.cs
- MsmqIntegrationInputMessage.cs
- StringBuilder.cs
- TypeDescriptionProvider.cs
- SerializerProvider.cs
- UnsafeNativeMethods.cs
- Convert.cs
- DragEvent.cs
- BindingCollection.cs
- AnnotationResource.cs
- ExpressionBuilder.cs
- Vector3DAnimation.cs
- DataListCommandEventArgs.cs
- LogSwitch.cs
- RenderDataDrawingContext.cs
- CompilationUnit.cs
- RepeatEnumerable.cs
- WindowsRichEdit.cs
- PerformanceCounterLib.cs
- CursorConverter.cs
- XmlSchemaDocumentation.cs
- NonNullItemCollection.cs
- ChildrenQuery.cs
- StylusPointProperties.cs
- HitTestParameters.cs
- EncodingDataItem.cs
- TypeNameConverter.cs
- AttributedMetaModel.cs
- DataGridViewHitTestInfo.cs
- AnnotationDocumentPaginator.cs
- UserControlBuildProvider.cs
- TextElementEditingBehaviorAttribute.cs
- ReadOnlyDictionary.cs
- WebPart.cs
- PropertyInfoSet.cs
- PkcsUtils.cs
- GenericXmlSecurityToken.cs
- XmlSecureResolver.cs
- FontCacheUtil.cs
- UserMapPath.cs
- LambdaExpression.cs
- IpcChannelHelper.cs
- WebPartConnectionsCloseVerb.cs
- StreamMarshaler.cs
- CodeAttributeDeclaration.cs
- ProgressPage.cs
- DBAsyncResult.cs
- TextServicesDisplayAttributePropertyRanges.cs
- FontResourceCache.cs
- ThrowOnMultipleAssignment.cs
- ListViewGroupItemCollection.cs
- BaseTemplateParser.cs
- ArglessEventHandlerProxy.cs
- SiteIdentityPermission.cs
- ExpressionNormalizer.cs
- ObjectQueryExecutionPlan.cs
- AssemblyCache.cs
- TableAdapterManagerMethodGenerator.cs
- DataContract.cs
- GridViewDeleteEventArgs.cs
- HashHelpers.cs
- ComNativeDescriptor.cs
- OdbcRowUpdatingEvent.cs
- BuildProvider.cs
- ExceptionNotification.cs
- UnsafeNativeMethodsTablet.cs
- RemoteWebConfigurationHostStream.cs
- PolygonHotSpot.cs
- CompilationSection.cs
- FaultDesigner.cs
- ElementAction.cs
- QueryExpr.cs
- _ChunkParse.cs
- SoapEnumAttribute.cs
- HttpRuntime.cs
- ToolStripDesigner.cs
- PackagePart.cs
- AssociationEndMember.cs
- ValuePatternIdentifiers.cs
- DetailsViewUpdateEventArgs.cs
- ServicePointManagerElement.cs
- ProxyRpc.cs
- AnimatedTypeHelpers.cs
- UriScheme.cs
- ThaiBuddhistCalendar.cs
- RightsManagementInformation.cs
- ControlCollection.cs
- DataViewManagerListItemTypeDescriptor.cs
- FileChangesMonitor.cs
- ShapeTypeface.cs
- BCLDebug.cs
- Rule.cs
- LinearGradientBrush.cs
- QueryContinueDragEvent.cs
- PngBitmapEncoder.cs
- ZipArchive.cs
- Int32Collection.cs
- Soap.cs
- x509utils.cs