一、问题及解决
1、问题
考试系统用的是三层,抽象工厂+反射,调试系统的时候出现了这样一个错误:是在使用缓存处抛异常
并且查看返回的借口的值为null,然后就出现这个错误,接口没有创建成功。
2、代码如下:(缓存+反射)
/// <summary>
/// 创建QuestionTypesDAL数据层接口。题型实体表
/// </summary>
public static ExamSystemV3.IDAL.IQuestionTypesDAL CreateQuestionTypesDAL()
{
string ClassNamespace = AssemblyPath +".QuestionTypesDAL";
object objType=CreateObject(AssemblyPath,ClassNamespace);
return (ExamSystemV3.IDAL.IQuestionTypesDAL)objType;
}
//使用缓存
private static object CreateObject(string AssemblyPath,string classNamespace)
{
object objType = DataCache.GetCache(classNamespace);//从缓存中读取
if (objType == null)
{
try
{
//反射的创建
objType = Assembly.Load(AssemblyPath).CreateInstance(classNamespace); DataCache.SetCache(classNamespace, objType);// 写入缓存
}
catch//(System.Exception ex)
{
//string str=ex.Message;// 记录错误日志
}
}
return objType;
}
在使用这个类的时候总是抛异常,未能加载文件或程序集 或它的某一个依赖项。
3、web.config文件
从网上搜索了一下,查看自己的web.config文件,
<!--数据访问层程序集名称 -->
<add key="ExamSystemV3.SQLServerDAL" value="Maticsoft.SQLServerDAL" />
4、SQLServerDAL配置如下:
项目的属性名称要和程序集的名称不一致导致了这个问题。
修改web.config文件后
<!--数据访问层程序集名称 -->
<add key="DAL" value="ExamSystemV3.SQLServerDAL" />
运行通过。
二、通过这个问题的学习
1、什么是缓存?
缓存(Cache)是一种用空间换取时间的技术,存在于计算机中很多地方,用来将一些慢速设备中的常用数据保存在快速设备中,取数据的时候直接从快速设备中取。比如CPU二级缓存、内存、windows文件读取缓存。缓存是改进网站性能的第一个手段,就像索引是改进数据库性能的第一个手段一样
2、缓存机制的好处?
缓存存放在服务器端,其目的是提高网站的响应性能,不用每次都到数据库中读取相关数据,缓存机制的重点是在并发工作环境下,当缓存所依赖的数据库记录信息发生变化时要及时将其从服务器内存中清除,以免呈现给用户过时的信息。
3、 缓存存在的问题:
缓存存在失效的问题:为了保证从缓存中读取数据和慢速数据(数据库)中数据一致,则需要在慢速数据(数据库)中对应的数据发生变化的时候,清除缓存中相应的数据(缓存依赖)。
三、总结
如果每次进入页面都要查询内容,则给服务器带来巨大的压力;如果只有一次访问,以后直接输出内容则提高效率。所以使用缓存机制,可以提高查询效率,降低服务器压力。
项目驱动学习。带着问题去学习的效率和效果更好。在学习理论和实践的时候一定要多问问自己“为什么”,多思考,多总结。