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
- HashHelper.cs
- DetailsViewModeEventArgs.cs
- ConstantSlot.cs
- MetaModel.cs
- Operand.cs
- BamlBinaryReader.cs
- basevalidator.cs
- _DisconnectOverlappedAsyncResult.cs
- SchemaNames.cs
- LookupNode.cs
- XmlnsCompatibleWithAttribute.cs
- BooleanAnimationUsingKeyFrames.cs
- UnsafeNativeMethods.cs
- MetadataSource.cs
- Vector3DAnimationBase.cs
- TargetParameterCountException.cs
- _SafeNetHandles.cs
- CodeNamespaceImportCollection.cs
- QilUnary.cs
- ScriptingProfileServiceSection.cs
- ExecutionEngineException.cs
- IconHelper.cs
- NamespaceQuery.cs
- FormClosedEvent.cs
- ErrorInfoXmlDocument.cs
- DragDropManager.cs
- RSACryptoServiceProvider.cs
- MissingFieldException.cs
- PhonemeEventArgs.cs
- PropertyInformation.cs
- SafeHandle.cs
- PathFigure.cs
- Pkcs7Recipient.cs
- BorderGapMaskConverter.cs
- ErrorEventArgs.cs
- WebPartConnectVerb.cs
- SelectionChangedEventArgs.cs
- HtmlElementErrorEventArgs.cs
- WindowsEditBox.cs
- WebScriptEnablingBehavior.cs
- UserMapPath.cs
- BitmapEffectDrawingContent.cs
- RowUpdatingEventArgs.cs
- SignatureHelper.cs
- BypassElementCollection.cs
- XmlSchemaDocumentation.cs
- ToolStripContentPanelDesigner.cs
- WebReferencesBuildProvider.cs
- DataSourceIDConverter.cs
- WinInet.cs
- TextEndOfLine.cs
- PartitionResolver.cs
- DomainConstraint.cs
- Odbc32.cs
- XslTransform.cs
- OpenTypeLayoutCache.cs
- tooltip.cs
- DefaultObjectMappingItemCollection.cs
- PowerStatus.cs
- Accessible.cs
- UrlMappingsSection.cs
- IdnElement.cs
- MimeWriter.cs
- IdnMapping.cs
- TargetException.cs
- OpenFileDialog.cs
- SqlBooleanMismatchVisitor.cs
- WindowProviderWrapper.cs
- ModifierKeysConverter.cs
- ExpressionLexer.cs
- StateElementCollection.cs
- Registry.cs
- SimpleModelProvider.cs
- typedescriptorpermission.cs
- TextTreePropertyUndoUnit.cs
- DependencyObject.cs
- BooleanStorage.cs
- Globals.cs
- DesignerDataParameter.cs
- PropertyDescriptor.cs
- CqlLexerHelpers.cs
- DecimalAnimation.cs
- EventWaitHandleSecurity.cs
- SoundPlayer.cs
- SpecularMaterial.cs
- XmlILConstructAnalyzer.cs
- IisHelper.cs
- WebPartMenu.cs
- DbRetry.cs
- GestureRecognizer.cs
- IPHostEntry.cs
- SamlConstants.cs
- DataGridViewSelectedRowCollection.cs
- TextEditorCopyPaste.cs
- IPHostEntry.cs
- DataControlFieldHeaderCell.cs
- SynchronizationContext.cs
- FormattedTextSymbols.cs
- StringAnimationUsingKeyFrames.cs
- TranslateTransform3D.cs