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
- WebContentFormatHelper.cs
- DataContractSet.cs
- TypeProvider.cs
- StylusEventArgs.cs
- FixedSOMGroup.cs
- BufferModeSettings.cs
- EntityConnection.cs
- SwitchElementsCollection.cs
- PageVisual.cs
- NeutralResourcesLanguageAttribute.cs
- ErrorBehavior.cs
- HtmlGenericControl.cs
- ClickablePoint.cs
- SqlClientPermission.cs
- BamlLocalizationDictionary.cs
- DynamicControl.cs
- GridEntry.cs
- SafeNativeMethodsOther.cs
- LogWriteRestartAreaAsyncResult.cs
- ImageUrlEditor.cs
- CalendarDay.cs
- ChildrenQuery.cs
- ConnectionsZone.cs
- ComplexBindingPropertiesAttribute.cs
- documentsequencetextcontainer.cs
- XPathDocumentNavigator.cs
- Point3DAnimationBase.cs
- GenericIdentity.cs
- GenericNameHandler.cs
- StrokeFIndices.cs
- URI.cs
- SignedInfo.cs
- FileDialog.cs
- ExpandedProjectionNode.cs
- AssociativeAggregationOperator.cs
- Rect3D.cs
- LinkLabelLinkClickedEvent.cs
- DataGridViewCellLinkedList.cs
- SqlClientWrapperSmiStream.cs
- EditorPart.cs
- FormatterConverter.cs
- PlatformCulture.cs
- ConnectionPoint.cs
- EventProxy.cs
- PasswordPropertyTextAttribute.cs
- SemanticResolver.cs
- CharacterBuffer.cs
- QueryCacheKey.cs
- ContextMarshalException.cs
- LocationReferenceValue.cs
- SiteMapNodeItem.cs
- ObservableCollectionDefaultValueFactory.cs
- AbandonedMutexException.cs
- CatalogZone.cs
- RedistVersionInfo.cs
- __TransparentProxy.cs
- SyntaxCheck.cs
- XmlWriter.cs
- BooleanExpr.cs
- XmlDataSource.cs
- LocationReferenceValue.cs
- MsmqBindingBase.cs
- HtmlInputHidden.cs
- AutomationPropertyInfo.cs
- FileRecordSequenceHelper.cs
- ILGen.cs
- mactripleDES.cs
- StructuredProperty.cs
- CaseCqlBlock.cs
- SqlCrossApplyToCrossJoin.cs
- FormsIdentity.cs
- SamlSubjectStatement.cs
- ProfilePropertySettingsCollection.cs
- AddressAccessDeniedException.cs
- DocumentGrid.cs
- TextRunCacheImp.cs
- PropertyAccessVisitor.cs
- ListBox.cs
- ComboBoxItem.cs
- DataGridViewTopLeftHeaderCell.cs
- BitmapEffectDrawingContent.cs
- MemberExpression.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- CodeObjectCreateExpression.cs
- RawUIStateInputReport.cs
- TableCell.cs
- CustomAssemblyResolver.cs
- ProviderCollection.cs
- SecurityRequiresReviewAttribute.cs
- ChooseAction.cs
- ActivityCompletionCallbackWrapper.cs
- WebEventTraceProvider.cs
- NumericPagerField.cs
- CodeEntryPointMethod.cs
- IriParsingElement.cs
- InkCanvasFeedbackAdorner.cs
- MarshalDirectiveException.cs
- DbConnectionPoolOptions.cs
- MembershipPasswordException.cs
- WebPartMinimizeVerb.cs