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
- ContentTextAutomationPeer.cs
- Cloud.cs
- SolidColorBrush.cs
- SqlReferenceCollection.cs
- BitmapFrame.cs
- codemethodreferenceexpression.cs
- ButtonChrome.cs
- _Win32.cs
- PanelStyle.cs
- GenericUriParser.cs
- StylusDownEventArgs.cs
- RIPEMD160Managed.cs
- MobileUserControl.cs
- WebSysDisplayNameAttribute.cs
- HostProtectionPermission.cs
- ConfigurationSection.cs
- Sql8ConformanceChecker.cs
- ValidationResults.cs
- LoadedOrUnloadedOperation.cs
- PrintingPermission.cs
- MaterialCollection.cs
- HttpModuleCollection.cs
- XPathSelectionIterator.cs
- EntityKey.cs
- CompilationPass2TaskInternal.cs
- NodeLabelEditEvent.cs
- IUnknownConstantAttribute.cs
- FixUp.cs
- FormatConvertedBitmap.cs
- StringValidatorAttribute.cs
- Hash.cs
- QueueProcessor.cs
- PersonalizationStateQuery.cs
- OperatingSystem.cs
- ControlLocalizer.cs
- SingleSelectRootGridEntry.cs
- ActivityMarkupSerializationProvider.cs
- ImageMetadata.cs
- SoapAttributes.cs
- DiscoveryReference.cs
- LoginName.cs
- WebSysDescriptionAttribute.cs
- BoolExpressionVisitors.cs
- SafeNativeMethods.cs
- CurrentChangingEventArgs.cs
- InputMethod.cs
- WindowsTab.cs
- ArraySubsetEnumerator.cs
- filewebresponse.cs
- ToolStripGripRenderEventArgs.cs
- PrivateFontCollection.cs
- WaitForChangedResult.cs
- PassportAuthentication.cs
- UrlUtility.cs
- XmlWrappingReader.cs
- CodeEntryPointMethod.cs
- BulletChrome.cs
- BufferModesCollection.cs
- TagMapInfo.cs
- ParameterBuilder.cs
- SqlCaseSimplifier.cs
- ISAPIRuntime.cs
- RuntimeResourceSet.cs
- ServiceNotStartedException.cs
- SerTrace.cs
- SafeRightsManagementPubHandle.cs
- SectionVisual.cs
- WorkflowPersistenceService.cs
- UndoEngine.cs
- ExpressionPrinter.cs
- LinearQuaternionKeyFrame.cs
- SHA1.cs
- Queue.cs
- CompensationDesigner.cs
- safelink.cs
- IntSecurity.cs
- ApplicationServicesHostFactory.cs
- tooltip.cs
- CodePageEncoding.cs
- DecoratedNameAttribute.cs
- UserNameSecurityTokenAuthenticator.cs
- QuaternionKeyFrameCollection.cs
- XmlSchemaAnnotated.cs
- TemplateControlParser.cs
- PresentationAppDomainManager.cs
- SystemTcpConnection.cs
- ToolboxItemCollection.cs
- KeyNotFoundException.cs
- SessionEndingEventArgs.cs
- ListViewItemEventArgs.cs
- SqlDataRecord.cs
- MenuCommands.cs
- CornerRadius.cs
- WorkflowValidationFailedException.cs
- HtmlTernaryTree.cs
- BuildProvider.cs
- LinearQuaternionKeyFrame.cs
- EventMap.cs
- XmlCharCheckingWriter.cs
- StreamGeometryContext.cs