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
- OuterGlowBitmapEffect.cs
- TextChange.cs
- StorageComplexPropertyMapping.cs
- ToolTipService.cs
- NativeMethodsOther.cs
- DetailsViewRow.cs
- ToolStripScrollButton.cs
- DataGridViewHeaderCell.cs
- MemoryMappedViewStream.cs
- HierarchicalDataSourceControl.cs
- ColumnHeaderConverter.cs
- WebPartTracker.cs
- XLinq.cs
- WebBrowserContainer.cs
- TextElementAutomationPeer.cs
- FirstMatchCodeGroup.cs
- HostingPreferredMapPath.cs
- EntityTypeBase.cs
- ToolStripSplitButton.cs
- SecurityStateEncoder.cs
- Rect3DValueSerializer.cs
- FormsAuthenticationConfiguration.cs
- HttpRuntime.cs
- VariantWrapper.cs
- SoapSchemaExporter.cs
- RelatedPropertyManager.cs
- RedistVersionInfo.cs
- HttpRequestTraceRecord.cs
- ContentPresenter.cs
- SortableBindingList.cs
- XmlSerializerFactory.cs
- SchemaTableOptionalColumn.cs
- DataStreams.cs
- RsaKeyGen.cs
- CollectionViewGroupInternal.cs
- X509InitiatorCertificateServiceElement.cs
- StringResourceManager.cs
- CodeRemoveEventStatement.cs
- BaseDataBoundControl.cs
- Ref.cs
- FtpCachePolicyElement.cs
- InternalResources.cs
- TextServicesCompartment.cs
- ListChangedEventArgs.cs
- ProbeDuplexCD1AsyncResult.cs
- EventNotify.cs
- MultiSelectRootGridEntry.cs
- TimeoutValidationAttribute.cs
- CommandEventArgs.cs
- TransformPattern.cs
- WinEventWrap.cs
- TransformConverter.cs
- DynamicPropertyHolder.cs
- CollectionTraceRecord.cs
- DeploymentExceptionMapper.cs
- CollectionViewGroup.cs
- Socket.cs
- SpinWait.cs
- DecoderExceptionFallback.cs
- StagingAreaInputItem.cs
- ActivityTypeCodeDomSerializer.cs
- ControlLocalizer.cs
- StorageEntityTypeMapping.cs
- RegexRunnerFactory.cs
- UnaryOperationBinder.cs
- NetworkInformationPermission.cs
- DoubleLink.cs
- ObjectStateEntryDbDataRecord.cs
- CodeDOMProvider.cs
- SerializationHelper.cs
- DiagnosticsConfiguration.cs
- FixedHyperLink.cs
- NewArrayExpression.cs
- mediaclock.cs
- TimeSpanFormat.cs
- WindowsToolbarItemAsMenuItem.cs
- SafeLibraryHandle.cs
- EngineSite.cs
- CustomAssemblyResolver.cs
- MediaTimeline.cs
- RegistryDataKey.cs
- FieldAccessException.cs
- UnitySerializationHolder.cs
- DiscoveryOperationContext.cs
- ResXBuildProvider.cs
- Queue.cs
- Input.cs
- HexParser.cs
- UrlMappingsModule.cs
- DetailsView.cs
- DataGridRelationshipRow.cs
- HtmlForm.cs
- RemoteX509Token.cs
- MatrixTransform3D.cs
- NullableFloatMinMaxAggregationOperator.cs
- ReservationCollection.cs
- InstanceNameConverter.cs
- UnsafeNativeMethods.cs
- EventMappingSettings.cs
- RotationValidation.cs