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

shankaipingo 2008-06-26 08:30:39
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 );
}
}
}
}

...全文
126 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
shankaipingo 2008-06-26
  • 打赏
  • 举报
回复
姐姐。回帖要有针对性啊。估计你没有看完整。
shankaipingo 2008-06-26
  • 打赏
  • 举报
回复
我感觉是一个三层结构
先从CACHE中拿---》没有就从文件中来,并更新CACHE---》没有文件就返回空
  • 打赏
  • 举报
回复
序列化主要优点有二:
1.数据以业务无关的中间形式传输,便于处理,XML就是典型的序列化方式。
2.序列化后的数据体长度缩减,节省传输资源。
与缓存配合,还可以节省box时间

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧