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
- TextRunCacheImp.cs
- OdbcConnectionOpen.cs
- BrowserCapabilitiesCodeGenerator.cs
- CqlLexerHelpers.cs
- EntityContainerEntitySet.cs
- typedescriptorpermissionattribute.cs
- XmlnsDefinitionAttribute.cs
- XmlDataSourceDesigner.cs
- X509IssuerSerialKeyIdentifierClause.cs
- XmlSchemaDatatype.cs
- TableCellCollection.cs
- MatrixTransform3D.cs
- LiteralControl.cs
- DistributedTransactionPermission.cs
- WindowAutomationPeer.cs
- CharEntityEncoderFallback.cs
- SecureConversationDriver.cs
- DataGridColumnCollection.cs
- LiteralControl.cs
- Container.cs
- OracleException.cs
- TraceUtility.cs
- MatrixStack.cs
- ConstraintStruct.cs
- ObjectSpanRewriter.cs
- PageThemeBuildProvider.cs
- BrowserDefinition.cs
- Semaphore.cs
- AccessorTable.cs
- BinaryFormatterSinks.cs
- BulletedList.cs
- FocusTracker.cs
- FilterInvalidBodyAccessException.cs
- HttpProfileBase.cs
- PictureBox.cs
- ImageSource.cs
- NativeMethods.cs
- XmlWriterTraceListener.cs
- RenderingBiasValidation.cs
- StylusPointDescription.cs
- MeasureData.cs
- XMLSyntaxException.cs
- GenericTextProperties.cs
- EdmToObjectNamespaceMap.cs
- PipelineDeploymentState.cs
- SecUtil.cs
- WorkflowServiceBehavior.cs
- MarkerProperties.cs
- ProcessManager.cs
- Fonts.cs
- BaseParser.cs
- ConfigurationSectionGroup.cs
- _CommandStream.cs
- XPathDocumentBuilder.cs
- QuestionEventArgs.cs
- SHA1CryptoServiceProvider.cs
- UpWmlMobileTextWriter.cs
- RoleManagerModule.cs
- ProviderException.cs
- HtmlPageAdapter.cs
- DataGridViewComboBoxCell.cs
- HtmlImage.cs
- RequestCachePolicy.cs
- ToolBarButtonClickEvent.cs
- TraceContext.cs
- CopyNodeSetAction.cs
- WebPartConnection.cs
- WindowsToolbarAsMenu.cs
- HostingPreferredMapPath.cs
- DataTable.cs
- SerializationAttributes.cs
- DataSourceView.cs
- figurelength.cs
- ObservableCollection.cs
- Popup.cs
- comcontractssection.cs
- OutOfMemoryException.cs
- Oid.cs
- Normalization.cs
- CommandDevice.cs
- InternalException.cs
- SQLGuid.cs
- WebProxyScriptElement.cs
- HeaderedContentControl.cs
- ObjectParameter.cs
- ElementInit.cs
- BeginEvent.cs
- ToolStripActionList.cs
- UrlMapping.cs
- SBCSCodePageEncoding.cs
- ThicknessAnimation.cs
- PropertyInformationCollection.cs
- WebPartConnection.cs
- PopOutPanel.cs
- ApplicationException.cs
- Rotation3D.cs
- StdValidatorsAndConverters.cs
- FlowPosition.cs
- ValueTypeFixupInfo.cs
- ProgressBarBrushConverter.cs