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
- DateTimeOffset.cs
- Polygon.cs
- ObjectIDGenerator.cs
- HttpCapabilitiesEvaluator.cs
- ExtensionQuery.cs
- SqlIdentifier.cs
- Process.cs
- XamlTreeBuilderBamlRecordWriter.cs
- Accessible.cs
- AddDataControlFieldDialog.cs
- Setter.cs
- LinqDataSourceContextEventArgs.cs
- MouseActionValueSerializer.cs
- SHA384.cs
- PrimitiveSchema.cs
- PropertyInformation.cs
- CursorEditor.cs
- DbConnectionFactory.cs
- ViewStateException.cs
- TreeNodeStyle.cs
- TriggerActionCollection.cs
- TableRowGroup.cs
- SurrogateSelector.cs
- StretchValidation.cs
- TextEditorCopyPaste.cs
- Dynamic.cs
- DeflateEmulationStream.cs
- TextServicesCompartmentContext.cs
- IsolationInterop.cs
- XmlAttributeAttribute.cs
- MediaSystem.cs
- RequestSecurityTokenResponseCollection.cs
- CreateRefExpr.cs
- TextTreeInsertUndoUnit.cs
- Endpoint.cs
- CodeAssignStatement.cs
- SimpleWorkerRequest.cs
- ListDependantCardsRequest.cs
- SchemaImporterExtension.cs
- PropertyPanel.cs
- CodeGroup.cs
- DBConcurrencyException.cs
- CursorConverter.cs
- HttpResponseInternalWrapper.cs
- Matrix.cs
- HtmlShimManager.cs
- SHA256.cs
- SimpleBitVector32.cs
- EventWaitHandleSecurity.cs
- RadioButton.cs
- GridViewCellAutomationPeer.cs
- AutomationElement.cs
- BrowserCapabilitiesCompiler.cs
- DefaultPrintController.cs
- XsltFunctions.cs
- x509utils.cs
- EpmTargetPathSegment.cs
- FixedPageAutomationPeer.cs
- DataGridPagerStyle.cs
- ObjectKeyFrameCollection.cs
- DocumentViewerBaseAutomationPeer.cs
- PageRanges.cs
- LinkClickEvent.cs
- ListChangedEventArgs.cs
- IsolatedStorageException.cs
- DataObjectCopyingEventArgs.cs
- oledbmetadatacolumnnames.cs
- TargetFrameworkUtil.cs
- SymmetricAlgorithm.cs
- WebScriptEnablingElement.cs
- dataSvcMapFileLoader.cs
- CharStorage.cs
- XmlDocument.cs
- PenContext.cs
- CompressedStack.cs
- CompilationPass2TaskInternal.cs
- VoiceChangeEventArgs.cs
- NamespaceExpr.cs
- FixedSOMSemanticBox.cs
- SafeArrayTypeMismatchException.cs
- MetadataHelper.cs
- CodeBinaryOperatorExpression.cs
- CSharpCodeProvider.cs
- WebResourceAttribute.cs
- MarkupExtensionParser.cs
- BindingMAnagerBase.cs
- NotCondition.cs
- TransactionException.cs
- Nullable.cs
- DataSourceCacheDurationConverter.cs
- COM2FontConverter.cs
- FixedDocument.cs
- TouchDevice.cs
- bindurihelper.cs
- BinaryFormatter.cs
- VirtualPath.cs
- HitTestFilterBehavior.cs
- FontDifferentiator.cs
- HtmlInputSubmit.cs
- RepeaterItem.cs