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
- HttpWebRequestElement.cs
- RegularExpressionValidator.cs
- RtfToXamlReader.cs
- TypeInitializationException.cs
- UrlAuthorizationModule.cs
- CopyOnWriteList.cs
- SymbolPair.cs
- IndexedEnumerable.cs
- ParameterCollection.cs
- WindowsListViewScroll.cs
- LZCodec.cs
- XmlExpressionDumper.cs
- AlphaSortedEnumConverter.cs
- SerializationUtilities.cs
- FontConverter.cs
- LineSegment.cs
- Message.cs
- LoginView.cs
- IssuanceLicense.cs
- DefaultBinder.cs
- DataGridViewLayoutData.cs
- Descriptor.cs
- DesignerOptionService.cs
- PolicyException.cs
- UInt16.cs
- ScheduleChanges.cs
- ClientSettings.cs
- WhitespaceReader.cs
- IndentTextWriter.cs
- PieceNameHelper.cs
- HijriCalendar.cs
- TreeViewItem.cs
- XmlSchemaCompilationSettings.cs
- Matrix.cs
- ProfilePropertyMetadata.cs
- DBBindings.cs
- TraceListeners.cs
- ContentPresenter.cs
- HostTimeoutsElement.cs
- FrameworkTemplate.cs
- WebPartConnectionsEventArgs.cs
- Permission.cs
- Delegate.cs
- GridViewColumnHeader.cs
- ListItem.cs
- OperationAbortedException.cs
- SemaphoreFullException.cs
- RadialGradientBrush.cs
- DataGridPageChangedEventArgs.cs
- FreeFormDragDropManager.cs
- Html32TextWriter.cs
- DataMemberConverter.cs
- NetCodeGroup.cs
- _AuthenticationState.cs
- ObjectDataSourceEventArgs.cs
- XsdDataContractExporter.cs
- Wizard.cs
- QilFactory.cs
- ClientApiGenerator.cs
- ThreadStaticAttribute.cs
- DynamicVirtualDiscoSearcher.cs
- PagesChangedEventArgs.cs
- FunctionGenerator.cs
- GlyphCache.cs
- HuffCodec.cs
- TextRangeSerialization.cs
- TypefaceCollection.cs
- DataRowCollection.cs
- AbstractDataSvcMapFileLoader.cs
- XmlUnspecifiedAttribute.cs
- WebBrowser.cs
- COMException.cs
- ToolStripContainer.cs
- ToolboxItemSnapLineBehavior.cs
- Expressions.cs
- DataObject.cs
- AttachedPropertyBrowsableWhenAttributePresentAttribute.cs
- SqlProviderUtilities.cs
- Certificate.cs
- COAUTHINFO.cs
- DateTimeConverter.cs
- InstanceLockException.cs
- TextSelection.cs
- LocalFileSettingsProvider.cs
- EditorZoneDesigner.cs
- CFStream.cs
- UniformGrid.cs
- OptimalBreakSession.cs
- MaskedTextProvider.cs
- StorageEndPropertyMapping.cs
- FormViewUpdatedEventArgs.cs
- NegatedConstant.cs
- TimeoutTimer.cs
- CodeStatement.cs
- Wildcard.cs
- EventEntry.cs
- XmlBoundElement.cs
- MetadataArtifactLoaderComposite.cs
- ProtocolsSection.cs
- SurrogateEncoder.cs