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
- ComponentManagerBroker.cs
- XamlDesignerSerializationManager.cs
- TableDetailsRow.cs
- XmlSchemaDocumentation.cs
- MailHeaderInfo.cs
- XmlSchemaInclude.cs
- ECDiffieHellmanCng.cs
- InkSerializer.cs
- ThreadExceptionDialog.cs
- Win32Native.cs
- ButtonAutomationPeer.cs
- PhysicalOps.cs
- DoubleLinkListEnumerator.cs
- Propagator.cs
- FunctionImportElement.cs
- StorageInfo.cs
- ArithmeticException.cs
- SelectorAutomationPeer.cs
- Process.cs
- ToolStripContainerActionList.cs
- ShaperBuffers.cs
- ListMarkerLine.cs
- DataObjectAttribute.cs
- ConfigurationManagerInternal.cs
- KerberosSecurityTokenAuthenticator.cs
- SafeNativeHandle.cs
- PathFigure.cs
- ExpressionBindings.cs
- METAHEADER.cs
- ExpressionQuoter.cs
- NonSerializedAttribute.cs
- mediaeventshelper.cs
- WebPartDisplayMode.cs
- UnauthorizedAccessException.cs
- TextElementEnumerator.cs
- XappLauncher.cs
- CompatibleComparer.cs
- StateBag.cs
- Types.cs
- StreamReader.cs
- SymmetricKeyWrap.cs
- ProcessModuleCollection.cs
- DesignTimeVisibleAttribute.cs
- ConnectionInterfaceCollection.cs
- ObjectQuery_EntitySqlExtensions.cs
- KeyTime.cs
- PageAsyncTask.cs
- FilteredReadOnlyMetadataCollection.cs
- XmlRootAttribute.cs
- BrowserTree.cs
- SqlBooleanizer.cs
- GenericWebPart.cs
- BamlLocalizer.cs
- BaseProcessor.cs
- CaseInsensitiveHashCodeProvider.cs
- BitArray.cs
- JpegBitmapDecoder.cs
- DateTimeOffsetConverter.cs
- MarshalDirectiveException.cs
- LoginDesignerUtil.cs
- ControlCollection.cs
- ReadOnlyDataSourceView.cs
- SafeFileMapViewHandle.cs
- SocketElement.cs
- MDIClient.cs
- lengthconverter.cs
- TypeReference.cs
- BinaryNode.cs
- AddingNewEventArgs.cs
- SpellerStatusTable.cs
- StackSpiller.Generated.cs
- NodeLabelEditEvent.cs
- ActivationArguments.cs
- PointCollectionValueSerializer.cs
- TextWriter.cs
- ClientApiGenerator.cs
- ScopeCompiler.cs
- ClientClassGenerator.cs
- figurelengthconverter.cs
- Operator.cs
- ConcatQueryOperator.cs
- ManifestSignedXml.cs
- CompleteWizardStep.cs
- RegularExpressionValidator.cs
- Triplet.cs
- XmlUrlResolver.cs
- WebPartTransformerCollection.cs
- PageParserFilter.cs
- ChannelTracker.cs
- PackageFilter.cs
- MemberJoinTreeNode.cs
- ConfigurationStrings.cs
- ScriptingProfileServiceSection.cs
- thaishape.cs
- ToolStripContainerDesigner.cs
- FixedSOMElement.cs
- FamilyMapCollection.cs
- TraceHandlerErrorFormatter.cs
- sortedlist.cs
- GregorianCalendar.cs