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
- dbdatarecord.cs
- DataGridViewCellToolTipTextNeededEventArgs.cs
- DefaultMemberAttribute.cs
- StylusCaptureWithinProperty.cs
- mediaclock.cs
- X509CertificateChain.cs
- ADConnectionHelper.cs
- SerializationStore.cs
- WorkflowInstanceProvider.cs
- BreakRecordTable.cs
- BitmapEffectDrawing.cs
- KernelTypeValidation.cs
- TypeListConverter.cs
- AssociationSetEnd.cs
- PrintPreviewGraphics.cs
- HandoffBehavior.cs
- Color.cs
- UrlMappingCollection.cs
- DataColumnChangeEvent.cs
- PersistStreamTypeWrapper.cs
- OdbcConnection.cs
- Model3DGroup.cs
- WebPartDescription.cs
- StringUtil.cs
- InheritanceRules.cs
- PagedDataSource.cs
- EntitySetBaseCollection.cs
- Exception.cs
- ProgressBarBrushConverter.cs
- SqlUtil.cs
- NavigatingCancelEventArgs.cs
- cache.cs
- TableChangeProcessor.cs
- Matrix3D.cs
- CompilerGlobalScopeAttribute.cs
- Utils.cs
- SqlDataSourceConfigureSelectPanel.cs
- ContainerAction.cs
- WebExceptionStatus.cs
- _HTTPDateParse.cs
- _UriSyntax.cs
- _DomainName.cs
- FieldAccessException.cs
- UriScheme.cs
- NumericExpr.cs
- Registry.cs
- TargetFrameworkUtil.cs
- TypeInitializationException.cs
- DataGridColumnEventArgs.cs
- RegexStringValidatorAttribute.cs
- ImageListUtils.cs
- AttributeEmitter.cs
- HtmlTableCellCollection.cs
- TextBlock.cs
- ResolvePPIDRequest.cs
- SimpleMailWebEventProvider.cs
- ContractReference.cs
- ProvidersHelper.cs
- GeneralEndpointIdentity.cs
- Image.cs
- IconBitmapDecoder.cs
- ExtentCqlBlock.cs
- PathFigureCollectionValueSerializer.cs
- KoreanLunisolarCalendar.cs
- TranslateTransform3D.cs
- PipelineModuleStepContainer.cs
- HtmlTextViewAdapter.cs
- OleDbSchemaGuid.cs
- GridViewRowCollection.cs
- SqlDuplicator.cs
- ResourceSet.cs
- RC2.cs
- TraceUtils.cs
- WebPartMinimizeVerb.cs
- InfoCardSymmetricAlgorithm.cs
- ComboBoxRenderer.cs
- ConfigXmlComment.cs
- RawKeyboardInputReport.cs
- RequestQueue.cs
- HtmlTableCellCollection.cs
- WindowsScrollBarBits.cs
- ControlPropertyNameConverter.cs
- TemplateControlParser.cs
- TextDecoration.cs
- GenericEnumerator.cs
- RowSpanVector.cs
- ChannelBinding.cs
- Int32AnimationUsingKeyFrames.cs
- RectAnimationClockResource.cs
- XsltArgumentList.cs
- sqlser.cs
- ToolStripDropTargetManager.cs
- WebResponse.cs
- SplitterPanel.cs
- SelectingProviderEventArgs.cs
- BooleanConverter.cs
- Expressions.cs
- SystemNetHelpers.cs
- ConsoleKeyInfo.cs
- XamlRtfConverter.cs