Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- XmlElementCollection.cs
- ToReply.cs
- AnchoredBlock.cs
- SQLCharsStorage.cs
- CreateUserWizard.cs
- WebPartCloseVerb.cs
- GridToolTip.cs
- bidPrivateBase.cs
- OpenTypeCommon.cs
- HttpProfileGroupBase.cs
- EventLogEntryCollection.cs
- ActivityDesigner.cs
- SQlBooleanStorage.cs
- ClientTargetSection.cs
- Int64Converter.cs
- TextWriterTraceListener.cs
- InfoCardPolicy.cs
- WorkflowApplicationCompletedEventArgs.cs
- CharConverter.cs
- COM2TypeInfoProcessor.cs
- WebBrowserHelper.cs
- hresults.cs
- XmlSchemaValidator.cs
- XmlSchemaProviderAttribute.cs
- DataGridViewRowHeightInfoPushedEventArgs.cs
- SafeRightsManagementHandle.cs
- ContentDisposition.cs
- ObjectManager.cs
- FigureParagraph.cs
- StrokeCollectionDefaultValueFactory.cs
- RequestedSignatureDialog.cs
- OleDbDataAdapter.cs
- MappingMetadataHelper.cs
- SplitterPanel.cs
- DetailsViewCommandEventArgs.cs
- CounterCreationDataCollection.cs
- DbProviderFactoriesConfigurationHandler.cs
- ExternalCalls.cs
- CommunicationObjectAbortedException.cs
- PropertyDescriptorGridEntry.cs
- TextRunProperties.cs
- DynamicScriptObject.cs
- EventProvider.cs
- ClientTargetCollection.cs
- StringDictionaryEditor.cs
- OdbcConnectionString.cs
- XmlNodeReader.cs
- DayRenderEvent.cs
- DataGridColumnEventArgs.cs
- DataBindEngine.cs
- LicenseManager.cs
- Fx.cs
- NativeMethods.cs
- D3DImage.cs
- DataGridViewTopLeftHeaderCell.cs
- RichTextBoxContextMenu.cs
- GlyphElement.cs
- WindowsEditBoxRange.cs
- TrackBar.cs
- ToolStripArrowRenderEventArgs.cs
- TrustSection.cs
- Select.cs
- TextEffect.cs
- FloatUtil.cs
- MatrixCamera.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- DataBoundControlHelper.cs
- BitmapInitialize.cs
- SendAgentStatusRequest.cs
- BitmapCodecInfo.cs
- AutoGeneratedFieldProperties.cs
- FixedSOMPage.cs
- ListItemCollection.cs
- TraceUtility.cs
- FileSecurity.cs
- QueryAccessibilityHelpEvent.cs
- Image.cs
- SelectedDatesCollection.cs
- MsmqOutputMessage.cs
- MsmqUri.cs
- PersonalizationProviderHelper.cs
- CfgArc.cs
- ChannelManager.cs
- PeerNameRecord.cs
- TableMethodGenerator.cs
- LazyTextWriterCreator.cs
- ThicknessKeyFrameCollection.cs
- XmlObjectSerializerReadContext.cs
- Journal.cs
- ArgumentsParser.cs
- TransformDescriptor.cs
- CompilerResults.cs
- DiscreteKeyFrames.cs
- DataContract.cs
- SqlWebEventProvider.cs
- SrgsElement.cs
- MouseGestureValueSerializer.cs
- DataColumnMapping.cs
- CapiNative.cs
- RewritingPass.cs