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
- PropertyGroupDescription.cs
- XmlSchemaGroupRef.cs
- EncodingNLS.cs
- ResourceWriter.cs
- ConfigXmlCDataSection.cs
- EmptyEnumerator.cs
- StrictModeSecurityHeaderElementInferenceEngine.cs
- GcSettings.cs
- InputBuffer.cs
- QueryOperatorEnumerator.cs
- SystemColors.cs
- FontSource.cs
- SafeThemeHandle.cs
- GeometryCollection.cs
- ZoomPercentageConverter.cs
- LiteralControl.cs
- PaginationProgressEventArgs.cs
- MULTI_QI.cs
- EarlyBoundInfo.cs
- XPathExpr.cs
- CmsInterop.cs
- FileUtil.cs
- TreeViewCancelEvent.cs
- sqlstateclientmanager.cs
- SchemaImporterExtension.cs
- InternalDispatchObject.cs
- StatusBarPanelClickEvent.cs
- counter.cs
- AccessDataSource.cs
- ColorBuilder.cs
- SubpageParagraph.cs
- GlobalAllocSafeHandle.cs
- ScriptingSectionGroup.cs
- MappingException.cs
- CompleteWizardStep.cs
- XmlUtil.cs
- DataGridViewHeaderCell.cs
- Form.cs
- CurrentTimeZone.cs
- ClientRolePrincipal.cs
- SurrogateSelector.cs
- SaveLedgerEntryRequest.cs
- Stream.cs
- DependencyPropertyHelper.cs
- ObjectStateFormatter.cs
- XmlUtf8RawTextWriter.cs
- AdvancedBindingPropertyDescriptor.cs
- GridSplitter.cs
- AnnouncementInnerClient11.cs
- ProcessInfo.cs
- ListControlActionList.cs
- SQLRoleProvider.cs
- AuthenticationServiceManager.cs
- ColorBlend.cs
- ServiceObjectContainer.cs
- NativeConfigurationLoader.cs
- DomainUpDown.cs
- StringUtil.cs
- ImageFormat.cs
- EventHandlers.cs
- MetroSerializationManager.cs
- AgileSafeNativeMemoryHandle.cs
- SafeProcessHandle.cs
- ReliableChannelFactory.cs
- TextModifier.cs
- IApplicationTrustManager.cs
- DataTableReaderListener.cs
- ValidationSummary.cs
- BitmapData.cs
- DomainUpDown.cs
- HtmlUtf8RawTextWriter.cs
- TextParagraphView.cs
- BrowserDefinitionCollection.cs
- HitTestResult.cs
- UnicastIPAddressInformationCollection.cs
- ToolboxDataAttribute.cs
- DataSpaceManager.cs
- ManagementInstaller.cs
- EditorPartCollection.cs
- SessionParameter.cs
- CodeGotoStatement.cs
- Rfc2898DeriveBytes.cs
- MultiPropertyDescriptorGridEntry.cs
- EntitySqlQueryCacheKey.cs
- NonParentingControl.cs
- ListViewItemSelectionChangedEvent.cs
- ItemMap.cs
- isolationinterop.cs
- MultipleViewPatternIdentifiers.cs
- Button.cs
- ContentPlaceHolder.cs
- ContractMapping.cs
- SerializerProvider.cs
- BufferedWebEventProvider.cs
- PropertyGridEditorPart.cs
- FixedSOMTableRow.cs
- PersistenceTypeAttribute.cs
- VirtualizingPanel.cs
- XmlQueryTypeFactory.cs
- ReadOnlyActivityGlyph.cs