Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Core / CSharp / System / Windows / Media / Imaging / ImagingCache.cs / 1 / ImagingCache.cs
//------------------------------------------------------------------------------
// Microsoft Avalon
// Copyright (c) Microsoft Corporation
//
// File: ImagingCache.cs
//
//-----------------------------------------------------------------------------
using System;
using System.IO;
using System.Collections;
using System.ComponentModel;
using System.ComponentModel.Design.Serialization;
using System.Reflection;
using MS.Internal;
using System.Diagnostics;
using System.Windows.Media;
using System.Globalization;
using System.Security;
using System.Security.Permissions;
using System.Runtime.InteropServices;
using System.Windows.Media.Animation;
using System.Windows.Media.Composition;
using System.Windows.Media.Imaging;
using MS.Win32;
using SR=MS.Internal.PresentationCore.SR;
using SRID=MS.Internal.PresentationCore.SRID;
namespace System.Windows.Media.Imaging
{
#region ImagingCache
///
/// ImagingCache provides caching for different Imaging objects
/// Caches are thread-safe.
///
internal static class ImagingCache
{
#region Methods
/// Adds an object to the image cache
internal static void AddToImageCache(Uri uri, object obj)
{
AddToCache(uri, obj, _imageCache);
}
/// Removes an object from the image cache
internal static void RemoveFromImageCache(Uri uri)
{
RemoveFromCache(uri, _imageCache);
}
/// Get object from the image cache
internal static object CheckImageCache(Uri uri)
{
return CheckCache(uri, _imageCache);
}
/// Adds an object to the decoder cache
internal static void AddToDecoderCache(Uri uri, object obj)
{
AddToCache(uri, obj, _decoderCache);
}
/// Removes an object from the decoder cache
internal static void RemoveFromDecoderCache(Uri uri)
{
RemoveFromCache(uri, _decoderCache);
}
/// Get object from the image cache
internal static object CheckDecoderCache(Uri uri)
{
return CheckCache(uri, _decoderCache);
}
/// Adds an object to a given table
private static void AddToCache(Uri uri, object obj, Hashtable table)
{
lock(table)
{
// if entry is already there, exit
if (table.Contains(uri))
{
return;
}
// if the table has reached the max size, try to see if we can reduce its size
if (table.Count == MAX_CACHE_SIZE)
{
ArrayList al = new ArrayList();
foreach (DictionaryEntry de in table)
{
// if the value is a WeakReference that has been GC'd, remove it
WeakReference weakRef = de.Value as WeakReference;
if ((weakRef != null) && (weakRef.Target == null))
{
al.Add(de.Key);
}
}
foreach (object o in al)
{
table.Remove(o);
}
}
// if table is still maxed out, exit
if (table.Count == MAX_CACHE_SIZE)
{
return;
}
// add it
table[uri] = obj;
}
}
/// Removes an object from a given table
private static void RemoveFromCache(Uri uri, Hashtable table)
{
lock(table)
{
// if entry is there, remove it
if (table.Contains(uri))
{
table.Remove(uri);
}
}
}
/// Return an object from a given table
private static object CheckCache(Uri uri, Hashtable table)
{
lock(table)
{
return table[uri];
}
}
#endregion
#region Data Members
/// image cache
private static Hashtable _imageCache = new Hashtable();
/// decoder cache
private static Hashtable _decoderCache = new Hashtable();
/// max size to limit the cache
private static int MAX_CACHE_SIZE = 300;
#endregion
}
#endregion
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------------------------
// Microsoft Avalon
// Copyright (c) Microsoft Corporation
//
// File: ImagingCache.cs
//
//-----------------------------------------------------------------------------
using System;
using System.IO;
using System.Collections;
using System.ComponentModel;
using System.ComponentModel.Design.Serialization;
using System.Reflection;
using MS.Internal;
using System.Diagnostics;
using System.Windows.Media;
using System.Globalization;
using System.Security;
using System.Security.Permissions;
using System.Runtime.InteropServices;
using System.Windows.Media.Animation;
using System.Windows.Media.Composition;
using System.Windows.Media.Imaging;
using MS.Win32;
using SR=MS.Internal.PresentationCore.SR;
using SRID=MS.Internal.PresentationCore.SRID;
namespace System.Windows.Media.Imaging
{
#region ImagingCache
///
/// ImagingCache provides caching for different Imaging objects
/// Caches are thread-safe.
///
internal static class ImagingCache
{
#region Methods
/// Adds an object to the image cache
internal static void AddToImageCache(Uri uri, object obj)
{
AddToCache(uri, obj, _imageCache);
}
/// Removes an object from the image cache
internal static void RemoveFromImageCache(Uri uri)
{
RemoveFromCache(uri, _imageCache);
}
/// Get object from the image cache
internal static object CheckImageCache(Uri uri)
{
return CheckCache(uri, _imageCache);
}
/// Adds an object to the decoder cache
internal static void AddToDecoderCache(Uri uri, object obj)
{
AddToCache(uri, obj, _decoderCache);
}
/// Removes an object from the decoder cache
internal static void RemoveFromDecoderCache(Uri uri)
{
RemoveFromCache(uri, _decoderCache);
}
/// Get object from the image cache
internal static object CheckDecoderCache(Uri uri)
{
return CheckCache(uri, _decoderCache);
}
/// Adds an object to a given table
private static void AddToCache(Uri uri, object obj, Hashtable table)
{
lock(table)
{
// if entry is already there, exit
if (table.Contains(uri))
{
return;
}
// if the table has reached the max size, try to see if we can reduce its size
if (table.Count == MAX_CACHE_SIZE)
{
ArrayList al = new ArrayList();
foreach (DictionaryEntry de in table)
{
// if the value is a WeakReference that has been GC'd, remove it
WeakReference weakRef = de.Value as WeakReference;
if ((weakRef != null) && (weakRef.Target == null))
{
al.Add(de.Key);
}
}
foreach (object o in al)
{
table.Remove(o);
}
}
// if table is still maxed out, exit
if (table.Count == MAX_CACHE_SIZE)
{
return;
}
// add it
table[uri] = obj;
}
}
/// Removes an object from a given table
private static void RemoveFromCache(Uri uri, Hashtable table)
{
lock(table)
{
// if entry is there, remove it
if (table.Contains(uri))
{
table.Remove(uri);
}
}
}
/// Return an object from a given table
private static object CheckCache(Uri uri, Hashtable table)
{
lock(table)
{
return table[uri];
}
}
#endregion
#region Data Members
/// image cache
private static Hashtable _imageCache = new Hashtable();
/// decoder cache
private static Hashtable _decoderCache = new Hashtable();
/// max size to limit the cache
private static int MAX_CACHE_SIZE = 300;
#endregion
}
#endregion
}
// 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
- DeviceOverridableAttribute.cs
- ObjectConverter.cs
- ScriptComponentDescriptor.cs
- COM2Properties.cs
- RijndaelManaged.cs
- CounterSample.cs
- EnlistmentTraceIdentifier.cs
- ResourceDescriptionAttribute.cs
- ViewLoader.cs
- Number.cs
- ClientSettingsSection.cs
- DefaultSection.cs
- RestClientProxyHandler.cs
- UniqueID.cs
- ImageSource.cs
- SwitchAttribute.cs
- StorageInfo.cs
- CodeNamespaceImportCollection.cs
- SchemaImporterExtension.cs
- GenericRootAutomationPeer.cs
- SQLBytes.cs
- PlanCompiler.cs
- ArrayConverter.cs
- TimeSpanMinutesConverter.cs
- Debugger.cs
- HandleCollector.cs
- FacetEnabledSchemaElement.cs
- BuildProviderAppliesToAttribute.cs
- ColumnMapCopier.cs
- Peer.cs
- IIS7WorkerRequest.cs
- DirectoryNotFoundException.cs
- DataAdapter.cs
- PreviewKeyDownEventArgs.cs
- HtmlInputRadioButton.cs
- CorrelationTokenInvalidatedHandler.cs
- ThreadSafeList.cs
- ListenerElementsCollection.cs
- HostSecurityManager.cs
- ToolStripScrollButton.cs
- EncodingNLS.cs
- XamlPoint3DCollectionSerializer.cs
- ResolveInfo.cs
- Site.cs
- ImportedPolicyConversionContext.cs
- Vector3DCollectionValueSerializer.cs
- AsymmetricKeyExchangeDeformatter.cs
- StylusEditingBehavior.cs
- PersistenceTypeAttribute.cs
- PersonalizationProviderHelper.cs
- PointAnimation.cs
- DefaultBinder.cs
- CompilerScope.cs
- SchemaEntity.cs
- UnsafeNativeMethods.cs
- ArrangedElementCollection.cs
- XmlnsDictionary.cs
- CurrencyWrapper.cs
- ITreeGenerator.cs
- ColumnMapTranslator.cs
- FontInfo.cs
- ClientFormsAuthenticationCredentials.cs
- InfoCard.cs
- cookieexception.cs
- CodeSnippetExpression.cs
- ExceptionHelpers.cs
- WebBrowsableAttribute.cs
- PeerSecurityManager.cs
- OutputCache.cs
- FileChangesMonitor.cs
- RelatedView.cs
- System.Data_BID.cs
- ExpressionBuilderCollection.cs
- TreeNodeStyle.cs
- ObjectCacheHost.cs
- SqlExpressionNullability.cs
- SubpageParaClient.cs
- CollectionDataContractAttribute.cs
- SafeFileMappingHandle.cs
- TextBoxLine.cs
- ChannelManagerService.cs
- OperationGenerator.cs
- DbConnectionPool.cs
- DrawingDrawingContext.cs
- Executor.cs
- DateTime.cs
- SqlDataSourceEnumerator.cs
- XmlDocumentType.cs
- TextParagraph.cs
- DbConnectionPoolGroupProviderInfo.cs
- IsolatedStorageFilePermission.cs
- MutexSecurity.cs
- XmlDeclaration.cs
- RtType.cs
- WS2007FederationHttpBindingElement.cs
- DataGridColumnHeaderAutomationPeer.cs
- Slider.cs
- Byte.cs
- MessageQueuePermissionEntryCollection.cs
- DataControlImageButton.cs