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
- Range.cs
- LinqDataSourceEditData.cs
- ExtendedProperty.cs
- ObjectDataSourceFilteringEventArgs.cs
- NameScope.cs
- SignatureHelper.cs
- DescriptionAttribute.cs
- ModifyActivitiesPropertyDescriptor.cs
- PropertyTab.cs
- XamlValidatingReader.cs
- BaseAddressElement.cs
- CustomWebEventKey.cs
- PrimitiveXmlSerializers.cs
- SrgsNameValueTag.cs
- SspiSafeHandles.cs
- NamedPipeHostedTransportConfiguration.cs
- InfoCardTraceRecord.cs
- PeerNameRecord.cs
- EdmRelationshipRoleAttribute.cs
- WorkflowServiceHostFactory.cs
- GlobalProxySelection.cs
- TabControl.cs
- MetaForeignKeyColumn.cs
- SystemInfo.cs
- Update.cs
- SqlDataSourceView.cs
- QilUnary.cs
- VisualProxy.cs
- ScriptResourceHandler.cs
- MenuCommand.cs
- DataRecordInfo.cs
- CodeCompiler.cs
- NetTcpSecurity.cs
- BamlReader.cs
- XmlHierarchyData.cs
- PropertyOverridesDialog.cs
- UniformGrid.cs
- CompModHelpers.cs
- RequestSecurityToken.cs
- SystemIPGlobalProperties.cs
- RtfControls.cs
- WindowsGraphicsWrapper.cs
- DispatcherEventArgs.cs
- FreezableDefaultValueFactory.cs
- AnnotationHighlightLayer.cs
- RouteCollection.cs
- HostedHttpContext.cs
- UnsafeNativeMethods.cs
- ItemTypeToolStripMenuItem.cs
- StorageModelBuildProvider.cs
- Matrix.cs
- TraceSwitch.cs
- SqlXml.cs
- ProtocolsConfigurationHandler.cs
- SqlCrossApplyToCrossJoin.cs
- VisualBasicSettingsHandler.cs
- ListViewPagedDataSource.cs
- AuthenticationManager.cs
- PtsHelper.cs
- dataobject.cs
- AbandonedMutexException.cs
- TextServicesContext.cs
- UnsafeNativeMethodsMilCoreApi.cs
- DelegateTypeInfo.cs
- WindowsFormsSectionHandler.cs
- MergeFilterQuery.cs
- ContactManager.cs
- IProducerConsumerCollection.cs
- TrackBarRenderer.cs
- WebDescriptionAttribute.cs
- StickyNote.cs
- SqlInternalConnectionTds.cs
- ProfileSettings.cs
- WebPermission.cs
- Command.cs
- ControlValuePropertyAttribute.cs
- UnmanagedMemoryStreamWrapper.cs
- XmlSchemaRedefine.cs
- xml.cs
- TableSectionStyle.cs
- DecimalConverter.cs
- Invariant.cs
- AccessedThroughPropertyAttribute.cs
- XmlSchemaComplexContent.cs
- AnnotationService.cs
- ExpressionBinding.cs
- FixedElement.cs
- DataComponentGenerator.cs
- EditCommandColumn.cs
- Mappings.cs
- RegexGroup.cs
- KeySpline.cs
- WebBrowserDocumentCompletedEventHandler.cs
- TemplateControlCodeDomTreeGenerator.cs
- RawStylusInput.cs
- FontNamesConverter.cs
- FormatVersion.cs
- NegotiateStream.cs
- UdpChannelListener.cs
- DataGridViewUtilities.cs