Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- SQLDecimalStorage.cs
- mediaeventargs.cs
- InternalUserCancelledException.cs
- CompilationPass2Task.cs
- DocumentSchemaValidator.cs
- EdgeModeValidation.cs
- TemplatedAdorner.cs
- IERequestCache.cs
- Panel.cs
- Style.cs
- StylusPointProperties.cs
- IdentityNotMappedException.cs
- ApplicationServicesHostFactory.cs
- HttpWebRequest.cs
- WindowsUserNameSecurityTokenAuthenticator.cs
- BufferBuilder.cs
- SinglePageViewer.cs
- UpdateCommand.cs
- XmlFormatExtensionAttribute.cs
- MasterPageBuildProvider.cs
- DbConnectionPoolCounters.cs
- SizeF.cs
- ErrorView.xaml.cs
- WindowsImpersonationContext.cs
- KnownAssemblyEntry.cs
- WinInet.cs
- DirtyTextRange.cs
- CompilationPass2Task.cs
- ParsedAttributeCollection.cs
- ShaderEffect.cs
- AmbientProperties.cs
- SelectionEditingBehavior.cs
- CodeStatementCollection.cs
- EmptyEnumerator.cs
- DataBindingList.cs
- EventLog.cs
- UpdatePanelControlTrigger.cs
- ImageDrawing.cs
- HiddenFieldPageStatePersister.cs
- GridViewDeleteEventArgs.cs
- SecurityHeader.cs
- ListViewItemEventArgs.cs
- UpdateEventArgs.cs
- LinqDataSourceContextEventArgs.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- streamingZipPartStream.cs
- ReadOnlyHierarchicalDataSource.cs
- SessionEndedEventArgs.cs
- ConsoleTraceListener.cs
- NamespaceCollection.cs
- TextAutomationPeer.cs
- ServiceManagerHandle.cs
- OrthographicCamera.cs
- DataSourceHelper.cs
- XmlSchemaAttribute.cs
- TransformProviderWrapper.cs
- SingleObjectCollection.cs
- Utils.cs
- IdentityReference.cs
- PathTooLongException.cs
- XmlSchemaAttribute.cs
- EntityCommand.cs
- DataGridViewCheckBoxCell.cs
- HandlerElement.cs
- AppSettingsExpressionBuilder.cs
- GlobalizationSection.cs
- DetailsViewInsertEventArgs.cs
- SchemaTableOptionalColumn.cs
- BitmapMetadata.cs
- Site.cs
- PointValueSerializer.cs
- ModuleElement.cs
- StickyNoteContentControl.cs
- TextEditorSelection.cs
- OleDbDataReader.cs
- NamespaceQuery.cs
- Thickness.cs
- AssemblyCollection.cs
- XmlLanguageConverter.cs
- CompilerErrorCollection.cs
- SystemWebSectionGroup.cs
- RegexCapture.cs
- StoragePropertyMapping.cs
- Int16KeyFrameCollection.cs
- SelectionItemProviderWrapper.cs
- NTAccount.cs
- login.cs
- BinHexDecoder.cs
- IsolatedStorage.cs
- SessionStateUtil.cs
- RawTextInputReport.cs
- TypeDescriptionProviderAttribute.cs
- GradientBrush.cs
- PersistenceProviderDirectory.cs
- MonthCalendar.cs
- DataBindingHandlerAttribute.cs
- ArcSegment.cs
- Viewport3DVisual.cs
- EventEntry.cs
- FormattedText.cs