帮我分析一下。加上序列化文件之后的缓存,有什么好处?

shankaipingo shankaipingo 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
namespace CanYouLib.Caching.FileBasedCachingProvider
{
public class FBCachingProvider : CachingProvider
{
public FBCachingProvider()
{
_providerConfiguration = ProviderConfiguration.GetProviderConfiguration( ProviderType );
}

private const string ProviderType = "caching";
private ProviderConfiguration _providerConfiguration;
internal static string CachingDirectory = Globals.ApplicationMapPath + "\\Cache\\";
internal const string CacheFileExtension = ".resources";
private static System.Web.Caching.Cache _objCache;
private static System.Web.Caching.Cache objCache
{
get
{
//create singleton of the cache object
if( _objCache == null )
{
_objCache = HttpRuntime.Cache;
}
return _objCache;
}
}
public override object GetItem(string CacheKey)
{
return objCache[CacheKey];
}

public override object GetPersistentCacheItem( string CacheKey, Type objType )
{
object obj = objCache[CacheKey];
if( obj != null )
{
return objCache[CacheKey];
}
else if( DataCache.CachePersistenceEnabled )
{
Stream objStream;
string f = GetFileName( CacheKey );
if( File.Exists( f ) )
{
objStream = File.OpenRead( f );

XmlSerializer serializer = new XmlSerializer( objType );
TextReader tr = new StreamReader( objStream );
obj = serializer.Deserialize( tr );
tr.Close();
Insert( CacheKey, obj, true );
}
}
return obj;
}

public override void Insert( string CacheKey, object objObject, bool PersistAppRestart )
{
if( PersistAppRestart )
{
//remove the cache key which
//will remove the serialized
//file before creating a new one
Remove( CacheKey );
}

string f = GetFileName( CacheKey );
CacheDependency d = new CacheDependency( f );

if( PersistAppRestart && DataCache.CachePersistenceEnabled )
{
CreateCacheFile( f, objObject );
}
else
{
d = null;
}

objCache.Insert( CacheKey, objObject, d );
}

public override void Insert( string CacheKey, object objObject, CacheDependency objDependency, bool PersistAppRestart )
{
if( PersistAppRestart )
{
//remove the cache key which
//will remove the serialized
//file before creating a new one
Remove( CacheKey );
}

string[] f = new string[1];
f[0] = GetFileName( CacheKey );

CacheDependency d = new CacheDependency( f, null, objDependency );
if( PersistAppRestart && DataCache.CachePersistenceEnabled )
{
CreateCacheFile( f[0], objObject );
}

else
{
d = objDependency;
}

objCache.Insert( CacheKey, objObject, d );
}

public override void Insert( string CacheKey, object objObject, CacheDependency objDependency, DateTime AbsoluteExpiration, TimeSpan SlidingExpiration, bool PersistAppRestart )
{
if( PersistAppRestart )
{
//remove the cache key which
//will remove the serialized
//file before creating a new one
Remove( CacheKey );
}

string[] f = new string[1];
f[0] = GetFileName( CacheKey );

CacheDependency d = new CacheDependency( f, null, objDependency );
if( PersistAppRestart && DataCache.CachePersistenceEnabled )
{
CreateCacheFile( f[0], objObject );
}

else
{
d = objDependency;
}

objCache.Insert( CacheKey, objObject, d, AbsoluteExpiration, SlidingExpiration );
}

public override void Insert( string CacheKey, object objObject, CacheDependency objDependency, DateTime AbsoluteExpiration, TimeSpan SlidingExpiration, CacheItemPriority Priority, CacheItemRemovedCallback OnRemoveCallback, bool PersistAppRestart )
{
if( PersistAppRestart )
{
//remove the cache key which
//will remove the serialized
//file before creating a new one
Remove( CacheKey );
}

string[] f = new string[1];
f[0] = GetFileName( CacheKey );

CacheDependency d = new CacheDependency( f, null, objDependency );
if( PersistAppRestart && DataCache.CachePersistenceEnabled )
{
CreateCacheFile( f[0], objObject );
}

else
{
d = objDependency;
}

objCache.Insert( CacheKey, objObject, d, AbsoluteExpiration, SlidingExpiration, Priority, OnRemoveCallback );
}

public override void Remove( string CacheKey )
{
if( objCache[CacheKey] != null )
{
objCache.Remove( CacheKey );
string f = GetFileName( CacheKey );

}
}


public override void RemovePersistentCacheItem( string CacheKey )
{
if( objCache[CacheKey] != null )
{
objCache.Remove( CacheKey );
if( DataCache.CachePersistenceEnabled == true )
{
string f = GetFileName( CacheKey );
DeleteCacheFile( f );
}
}
}

public override string PurgeCache()
{
//省略
}

private int PurgeCacheFiles( string[] strFiles )
{
//省略
return PurgedFiles;
}

private static string GetFileName( string FileName )
{
//省略
}

private static void CreateCacheFile( string FileName )
{
StreamWriter s;
if( ! File.Exists( FileName ) )
{
s = File.CreateText( FileName );
if( s != null )
{
s.Close();
}
}
}

private static void CreateCacheFile( string FileName, object ObjectToPersist )
{
string str = XmlUtils.Serialize( ObjectToPersist );

StreamWriter s;
if( ! File.Exists( FileName ) )
{
s = File.CreateText( FileName );
s.Write( str );
if( s != null )
{
s.Close();
}
}
}

private static void DeleteCacheFile( string FileName )
{
if( File.Exists( FileName ) )
{
File.Delete( FileName );
}
}
}
}

...全文
评论 3
收藏 已收藏
分享
返回顶部
shankaipingo
.NET社区 62,272 成员 668,968 内容