Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Core / MS / Internal / FontCache / TypefaceMetricsCache.cs / 1 / TypefaceMetricsCache.cs
//---------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // Description: TypefaceMetricsCache // // History: 5-25-2005 [....], 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ItemsPanelTemplate.cs
- printdlgexmarshaler.cs
- DataMemberFieldConverter.cs
- xsdvalidator.cs
- ManagementDateTime.cs
- Logging.cs
- SmiContext.cs
- RegexRunner.cs
- XPathNavigatorKeyComparer.cs
- HttpUnhandledOperationInvoker.cs
- BaseResourcesBuildProvider.cs
- FlowPosition.cs
- PageContentAsyncResult.cs
- PrivilegeNotHeldException.cs
- PathGeometry.cs
- GeneratedCodeAttribute.cs
- SQLConvert.cs
- ObjectStateFormatter.cs
- wmiprovider.cs
- LayoutUtils.cs
- InProcStateClientManager.cs
- SerializationFieldInfo.cs
- ServiceContractDetailViewControl.cs
- ImportContext.cs
- FormsIdentity.cs
- xsdvalidator.cs
- ClientFormsAuthenticationMembershipProvider.cs
- PropertyChangeTracker.cs
- RepeatButton.cs
- ImageSource.cs
- QilStrConcatenator.cs
- UICuesEvent.cs
- XmlSchemaSequence.cs
- FilterException.cs
- GridViewColumnHeaderAutomationPeer.cs
- MimeParameterWriter.cs
- TextFormatterContext.cs
- DataListComponentEditor.cs
- EventLogInformation.cs
- ParagraphVisual.cs
- ActivityValidator.cs
- DocumentGridPage.cs
- ApplicationContext.cs
- ConnectionInterfaceCollection.cs
- FolderBrowserDialog.cs
- assertwrapper.cs
- XmlReader.cs
- ISAPIRuntime.cs
- AdPostCacheSubstitution.cs
- MenuTracker.cs
- ListViewEditEventArgs.cs
- ProtocolsSection.cs
- Timer.cs
- StorageTypeMapping.cs
- BamlRecordReader.cs
- CheckPair.cs
- TreeView.cs
- SqlBooleanMismatchVisitor.cs
- SortDescription.cs
- ToolboxComponentsCreatingEventArgs.cs
- OleDbTransaction.cs
- NameValueCollection.cs
- Exception.cs
- UrlAuthorizationModule.cs
- FilterQueryOptionExpression.cs
- KeyGestureValueSerializer.cs
- ClientSettings.cs
- WindowsFormsEditorServiceHelper.cs
- WorkflowInstanceExtensionManager.cs
- DocumentViewerConstants.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- Parsers.cs
- OrCondition.cs
- HtmlUtf8RawTextWriter.cs
- ProviderBase.cs
- RequestNavigateEventArgs.cs
- CellTreeNodeVisitors.cs
- Helpers.cs
- SqlStatistics.cs
- securitycriticaldataformultiplegetandset.cs
- ProvideValueServiceProvider.cs
- NegatedCellConstant.cs
- TextPenaltyModule.cs
- HttpProfileGroupBase.cs
- SvcMapFileLoader.cs
- Int32KeyFrameCollection.cs
- Point3DAnimationBase.cs
- SoapReflector.cs
- XmlWrappingReader.cs
- CodeTypeMemberCollection.cs
- CodeDomSerializer.cs
- LocalizableAttribute.cs
- CodeAttributeArgument.cs
- SystemWebSectionGroup.cs
- AttachedPropertiesService.cs
- TimersDescriptionAttribute.cs
- StatusBarPanel.cs
- ObjectParameterCollection.cs
- SourceInterpreter.cs
- FixedTextContainer.cs