Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / MS / Internal / FontCache / TypefaceMetricsCache.cs / 1305600 / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DockingAttribute.cs
- ImmutableObjectAttribute.cs
- VarInfo.cs
- FtpWebResponse.cs
- PeerTransportElement.cs
- securestring.cs
- TextEditorSpelling.cs
- IApplicationTrustManager.cs
- ObjectMaterializedEventArgs.cs
- EmbeddedObject.cs
- HttpApplication.cs
- EventLogger.cs
- UserPreferenceChangingEventArgs.cs
- WebPartVerb.cs
- ToolboxItemCollection.cs
- SelectionGlyphBase.cs
- ConstructorArgumentAttribute.cs
- PieceNameHelper.cs
- SqlDependencyUtils.cs
- OdbcReferenceCollection.cs
- DataGridAutoFormatDialog.cs
- WebBrowserPermission.cs
- RectangleGeometry.cs
- EventMappingSettings.cs
- DbConnectionFactory.cs
- InstanceDescriptor.cs
- DoubleAnimation.cs
- ConnectionStringsExpressionEditor.cs
- ClientTarget.cs
- Graphics.cs
- DaylightTime.cs
- SQLChars.cs
- HtmlTernaryTree.cs
- GcSettings.cs
- StreamResourceInfo.cs
- Asn1IntegerConverter.cs
- WebServiceEndpoint.cs
- SqlCharStream.cs
- PointCollection.cs
- ColorComboBox.cs
- XmlSchemaObjectTable.cs
- WebBrowserBase.cs
- ListView.cs
- DatePickerDateValidationErrorEventArgs.cs
- SpecularMaterial.cs
- ProtocolsConfiguration.cs
- AsyncOperationManager.cs
- DataGridViewHeaderCell.cs
- DurableMessageDispatchInspector.cs
- MediaPlayerState.cs
- IResourceProvider.cs
- ContentElementCollection.cs
- Vector3dCollection.cs
- LogPolicy.cs
- ComboBoxDesigner.cs
- MetadataUtil.cs
- ConditionalDesigner.cs
- ContextInformation.cs
- WindowProviderWrapper.cs
- PaperSource.cs
- figurelengthconverter.cs
- RootContext.cs
- ChildDocumentBlock.cs
- GridItemProviderWrapper.cs
- FlowPosition.cs
- IndexedString.cs
- DirtyTextRange.cs
- TypeElement.cs
- SystemColors.cs
- Fonts.cs
- BindingEditor.xaml.cs
- ArraySegment.cs
- CapabilitiesUse.cs
- FormViewRow.cs
- COM2ColorConverter.cs
- XmlQueryOutput.cs
- WCFServiceClientProxyGenerator.cs
- XmlAttributeCollection.cs
- EventLog.cs
- EdmFunctionAttribute.cs
- CheckBoxFlatAdapter.cs
- ParserStreamGeometryContext.cs
- SourceSwitch.cs
- InkCollectionBehavior.cs
- WinFormsSecurity.cs
- SetterBaseCollection.cs
- SecureUICommand.cs
- EntityConnectionStringBuilder.cs
- SqlConnectionFactory.cs
- ItemPager.cs
- TemplateControlCodeDomTreeGenerator.cs
- Icon.cs
- HatchBrush.cs
- _CacheStreams.cs
- XPathDocument.cs
- SecurityDescriptor.cs
- UInt16Converter.cs
- GridViewSortEventArgs.cs
- MimeMapping.cs
- DataSourceControlBuilder.cs