Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- DataBinder.cs
- HostProtectionPermission.cs
- Column.cs
- SelectedPathEditor.cs
- WebBrowser.cs
- XmlCharCheckingReader.cs
- Deserializer.cs
- ToolboxItemAttribute.cs
- PenThreadWorker.cs
- ProxyWebPart.cs
- TextDecoration.cs
- AssemblyGen.cs
- DescriptionCreator.cs
- FontUnitConverter.cs
- MetadataProperty.cs
- GlobalizationSection.cs
- Operand.cs
- StatusBar.cs
- KeyNotFoundException.cs
- KoreanCalendar.cs
- RegionIterator.cs
- XmlDataCollection.cs
- ConfigurationValue.cs
- HttpNamespaceReservationInstallComponent.cs
- DataGridViewCellStyleEditor.cs
- XsltFunctions.cs
- metadatamappinghashervisitor.hashsourcebuilder.cs
- ProfessionalColorTable.cs
- Asn1IntegerConverter.cs
- HtmlImage.cs
- LineMetrics.cs
- Input.cs
- WithParamAction.cs
- InkCanvasFeedbackAdorner.cs
- ResourcePool.cs
- PersistenceMetadataNamespace.cs
- SrgsRulesCollection.cs
- LogWriteRestartAreaAsyncResult.cs
- VScrollProperties.cs
- BufferModesCollection.cs
- SqlSelectClauseBuilder.cs
- GroupQuery.cs
- RectangleHotSpot.cs
- SerialReceived.cs
- NetPeerTcpBinding.cs
- ConfigXmlElement.cs
- ProfileElement.cs
- Verify.cs
- FixedHyperLink.cs
- ComNativeDescriptor.cs
- ScopelessEnumAttribute.cs
- MethodAccessException.cs
- RtfFormatStack.cs
- UnsafeNativeMethodsMilCoreApi.cs
- UnmanagedMemoryStreamWrapper.cs
- XmlSerializationWriter.cs
- TextTreeTextBlock.cs
- RequestCacheValidator.cs
- StorageEntityContainerMapping.cs
- SettingsPropertyNotFoundException.cs
- WaitingCursor.cs
- ReadingWritingEntityEventArgs.cs
- CodePrimitiveExpression.cs
- AxisAngleRotation3D.cs
- HtmlInputRadioButton.cs
- XmlIlVisitor.cs
- NativeObjectSecurity.cs
- DesignerDeviceConfig.cs
- SafeNativeMemoryHandle.cs
- InvalidOperationException.cs
- LinqDataSourceDisposeEventArgs.cs
- PowerStatus.cs
- StringValueSerializer.cs
- BuildProvidersCompiler.cs
- BitmapEffectInputData.cs
- ToolStripScrollButton.cs
- QilInvoke.cs
- DataRowChangeEvent.cs
- RemoteX509AsymmetricSecurityKey.cs
- ButtonField.cs
- SBCSCodePageEncoding.cs
- WindowsGrip.cs
- ReflectTypeDescriptionProvider.cs
- ContextTokenTypeConverter.cs
- CompilationUtil.cs
- BrowserDefinition.cs
- X509LogoTypeExtension.cs
- Parallel.cs
- CompilerWrapper.cs
- RuntimeConfig.cs
- FlowDocumentReader.cs
- PathNode.cs
- TextServicesProperty.cs
- XsltConvert.cs
- UInt64Storage.cs
- SqlInternalConnection.cs
- BitmapEffectInput.cs
- DataTableReader.cs
- DbgUtil.cs
- XmlBaseWriter.cs