一、问题及解决
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# 反射工厂示例C# 反射工厂示例C# 反射工厂示例C# 反射工厂示例C# 反射工厂示例C# 反射工厂示例C# 反射工厂示例C# 反射工厂示例C# 反射工厂示例C# 反射工厂示例
C#反射+抽象工厂
信息系统开发教程——使用C#和SQL+Server+2005
c#工厂模式——简单工厂_抽象工厂实例
关于csharp和sql的一个很好的教程,希望对大家有用。
c#工厂模式 简单工厂,抽象工厂,单件模式
SQL+Server+2005+Visual+C#+2005专业开发精解+源代码
.NET开源图表控件——Dll+演示+帮助文档,很好的东西啊。。我用过的。。。相对不错,特别分享一下。。。
Easyui 前台框架结合PetaPoco ROM框架,理财后台管理系统。
c#插件模式 ——例子(利用反射机制) foreach (ListViewItem item in listView1.Items) { if (item.Checked) { Assembly assembly = Assembly.LoadFile(Path.Combine(pluginpath, "TestComWin.dll")); // ...
C#易筋经——反射、反射加壳、反射脱壳、反射注册机
WPF编程宝典——C#+2010版 书籍配套源码
C#反射工厂演示程序包(c#+cs+vs2005)
《数据结构与算法——C#语言描述,C# 数据结构 源代码 第一本C#数据结构的书
在线考试系统(C#经典源代码) 在线考试系统(C#经典源代码) 在线考试系统(C#经典源代码)
c#三层+抽象工厂实现+类似抽象工厂反射实现 大家可以看看,很不错,顺便做个广告,希望大家愿意交流的加小弟qq 9480007, 也可以进qq群 46301976 或 76055852
1.实现了SPY++的核心功能,获取窗口句柄、窗口标题、类型名等信息; 2.实现了高亮功能;
C#反射机制源码学习.rar C#反射机制源码学习.rar C#反射机制源码学习.rar
一天我与一位程序员同事进行了一场关于将程序从一种平台移植到另一种平台时所引起的棘手问题的谈话。当我们在抱怨字节存储次序,对齐限制和编译器的怪异行为时,这位朋友问了我一个天真但又很重要的问题:“如果想要...