[原]考试系统——C#反射机制+工厂模式+缓存机制遇到问题
2013-11-03 17:04
387 查看
一、问题及解决
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、 缓存存在的问题:
缓存存在失效的问题:为了保证从缓存中读取数据和慢速数据(数据库)中数据一致,则需要在慢速数据(数据库)中对应的数据发生变化的时候,清除缓存中相应的数据(缓存依赖)。三、总结
如果每次进入页面都要查询内容,则给服务器带来巨大的压力;如果只有一次访问,以后直接输出内容则提高效率。所以使用缓存机制,可以提高查询效率,降低服务器压力。项目驱动学习。带着问题去学习的效率和效果更好。在学习理论和实践的时候一定要多问问自己“为什么”,多思考,多总结。
原文引用链接
相关文章推荐
- 考试系统——C#反射机制+工厂模式+缓存机制遇到问题
- C#:Lambda 表达式
- C#中使用正则表达式验证电话号码、手机号、身份证号、数字和邮编
- C#中BeginInvoke和EndInvoke的用法
- C#:匿名方法
- C#XmlSerializer 序列化/反序列化
- c# 将DataGridViewRows转换为DataTable数据
- [你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单
- c#语言编程中GDI+的运用
- C#中如何捕捉对话框的文本内容
- .NET:CLR via C# Shared Assemblies and Strongly Named Assemblies
- [C#]用mono写跨平台的C#程序
- C#基础笔记——委托(Delegate)和事件(Event)
- 使用C#开发基于Winform的手机号码归属地查询工具
- 深入.NET平台和C#编程---总结
- C#中精确计时的一点收获
- C#获取当前页面的URL示例代码
- 通过C#动态生成图书信息XML文件
- C#操作Excel数据增删改查示例
- C#学习总结2013.10.24—2013.10.30