Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Core / CSharp / MS / Internal / FontCache / TypefaceMetricsCache.cs / 1 / 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. //---------------------------------------------------------------------------- // // 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
- BinaryConverter.cs
- NumberFormatInfo.cs
- x509utils.cs
- RunInstallerAttribute.cs
- GridView.cs
- PartitionResolver.cs
- DetailsView.cs
- WebScriptMetadataMessageEncodingBindingElement.cs
- ServiceModelDictionary.cs
- SecurityProtocol.cs
- Object.cs
- LookupBindingPropertiesAttribute.cs
- SafeNativeMethods.cs
- TreeNodeCollection.cs
- BezierSegment.cs
- TextEditorSpelling.cs
- WebPartRestoreVerb.cs
- FlowDocument.cs
- ProvideValueServiceProvider.cs
- DesignerCommandSet.cs
- GroupBox.cs
- activationcontext.cs
- ADMembershipUser.cs
- FormatSettings.cs
- DecoderBestFitFallback.cs
- Metafile.cs
- HtmlShimManager.cs
- SqlWebEventProvider.cs
- Script.cs
- ImportStoreException.cs
- XmlElementAttribute.cs
- Schema.cs
- Encoding.cs
- GestureRecognizer.cs
- ServiceHttpHandlerFactory.cs
- ViewEvent.cs
- BitmapCacheBrush.cs
- OraclePermissionAttribute.cs
- TemplateComponentConnector.cs
- StringCollectionEditor.cs
- ExpressionVisitorHelpers.cs
- BindingExpressionUncommonField.cs
- VisualProxy.cs
- DataGridViewElement.cs
- AppSettingsReader.cs
- MultiView.cs
- CreateUserErrorEventArgs.cs
- QilGeneratorEnv.cs
- EdmFunctionAttribute.cs
- MobileControlsSection.cs
- Image.cs
- ArraySortHelper.cs
- XmlPropertyBag.cs
- RequiredFieldValidator.cs
- Canvas.cs
- BamlRecords.cs
- XPathSingletonIterator.cs
- _ShellExpression.cs
- RelationshipManager.cs
- BamlTreeUpdater.cs
- ComponentEditorPage.cs
- SqlGenerator.cs
- FactoryMaker.cs
- QuerySafeNavigator.cs
- RegexCharClass.cs
- MethodToken.cs
- TypeReference.cs
- StringBuilder.cs
- NetworkStream.cs
- ResourceAttributes.cs
- DocumentManager.cs
- SaveFileDialog.cs
- Attributes.cs
- NameValueConfigurationCollection.cs
- GridPattern.cs
- BindingWorker.cs
- BitmapSourceSafeMILHandle.cs
- PreProcessInputEventArgs.cs
- AssociationType.cs
- Misc.cs
- SectionUpdates.cs
- XmlHierarchicalDataSourceView.cs
- PrintingPermissionAttribute.cs
- TreeViewBindingsEditor.cs
- FigureHelper.cs
- DoubleAnimationBase.cs
- X509CertificateCollection.cs
- HitTestWithGeometryDrawingContextWalker.cs
- XpsSerializationException.cs
- AutomationElementCollection.cs
- SchemaImporterExtensionElementCollection.cs
- OdbcConnectionString.cs
- MemberMemberBinding.cs
- AuthenticatingEventArgs.cs
- WebEventCodes.cs
- FindResponse.cs
- EncryptedKey.cs
- TreeNode.cs
- BuiltInExpr.cs
- HttpListenerException.cs