ASP.NET发展中如何突破文件依赖缓存?
在网络项目中,您可以使用会话、应用程序等。缓存数据,也可以使用缓存来缓存数据。今天,我们特别关注缓存。缓存位于命名空间系统下。当我们看到它时,我们会想到它在网络项目中的使用。描述:缓存类不能在ASP.NET应用程序之外使用。它是为在ASP.NET缓存网络应用程序而设计和测试的。在其他类型的应用程序中,例如控制台应用程序或Windows窗体应用程序,ASP.NET缓存可能无法正常工作。我们来看看一些Cache依赖项的用法:通过指定依赖项向缓存添加项的示例:复制代码如下:cache.insert ('cacheitem2 ',' cacheitem 2 ');字符串[]依赖项={ ' cacheitem 2 ' };缓存。插入('缓存项目3 ','缓存项目3 ',新系统。web . cache . cache dependency(null,dependencies让我们看一下简单的文件相关缓存的使用。大家都知道缓存支持依赖文件的缓存:cache.insert ('cacheitem4 ',' cacheitem4 ',新系统。web . cache . cache dependency(server . map path(' xmlfile . XML '));以下是多依赖缓存的效果:复制的代码如下: system . web . cache . cache dependency dep 1=new system . web . cache . cache dependency(server . map path(' xmlfile . XML '));string[]KeyDependensities 2={ ' cacheItem1 ' };系统。缓存依赖关系dep2=新系统。web . cache . cache dependency(null,key dependencies 2);系统。新系统。web . cache . aggregatecachedependency();aggDep。add(dep 1);aggDep。添加(dep 2);缓存。插入(' CacheItem5 ',' cache Item 5 ',agg dep);通过上面的代码,我们基本上知道了一些缓存相关方面的用法,也达到了我们原本想要的效果。让我们通过一个完整的示例来看看缓存文件相关缓存的使用。首先定义一个XML文件,内容如下,附带一个实体类:复制代码如下:xml版本='1.0 '编码='utf-8 '?学生学生姓名陈赫/姓名性别男/性别年龄23岁/年龄/学生学生姓名爱情/姓名性别男/性别年龄23岁/年龄/学生/学生定义一个用于读取上述xml文件的类:复制代码如下:公共类访问提供程序{public access provider () {}公共列表学生getstudentlist(string file path){ xe element root=xe element . load(file path);IEnumerableXElement可枚举=从根中的e开始。元素('学生')选择e;list student list=new list student();学生学生=空;foreach(可枚举中的XElement元素){ Student=new Student();学生。Name=元素。元素('名称')。价值;学生。年龄=转换。ToInt32(元素。元素(“年龄”)。价值);学生。性=元素。元素(“性”)。价值;名单。添加(学生);}返回列表;}}读取缓存并设置文件缓存依赖关系:复制代码如下:公共分部类默认:系统。web . ui . page { protected void page _ load(object sender,event args e){ list student list=cache[' item 1 ']为list student;if(列表!=空列表。Count0) { list。ForEach(项目={响应。写(项。名称为“”的项目。年龄''项目。sex ' br/');});} else { AccessProvider provider=new AccessProvider();字符串字段路径=服务器。MapPath(' ~/XMl/student . XMl ');list=提供程序。GetStudentList(fielPath);缓存。插入('项目1 ',列表,新系统。web . cache . cache dependency(fielPath));}}}稍后将上传此示例。运行页面后,您可以手动修改上面定义的xml文件,然后刷新页面以查看效果。修改此文件后,缓存的内容将无效,然后再次读取xml文件并再次缓存。代码在这里不做过多解释。缓存只能用于网站收集。遇到Console项目和WinForm等其他项目怎么办?没有依赖缓存怎么解决这个问题?让我们看看如何实现一个依赖于文件的缓存。目的:当修改、删除或添加特定文件夹中的文件时,使系统中的缓存无效或重新加载缓存。
程序类型:WinForm程序网程序安慰程序我们使用最为简单的安慰程序作为例子,这个最具有通用性。首先这里自定义一个缓存对象:复制代码代码如下:命名空间CacheConsole {公共类缓存{私有静态int Num=50私有静态对象obj=new object();static Cache(){ } public static int Get(){ return Num;} public static void Update(int argValue){ lock(obj){ Num=argValue;} } } } 上面的缓存其实就是一个用静态修饰的全局变量,其中定义了一个缓存数据获取的方法和一个缓存更新的方法,静态变量数字作为一个缓存容器,默认初始值为50.这个缓存容器虽然简单了点,但是也能够达到我们的要求。假设我们程序依赖的文件位于F: \文件\目录下面,所以我们要去监控这些文件,实现监控更新缓存的代码如下:复制代码代码如下:私有静态void Run(){ filestytemwatcher=new filestytemwatcher();观察者。路径=@ ' F: \文件\观察者通知过滤器=通知过滤器.创建时间|通知过滤器。目录名|通知过滤器。文件名|通知过滤器上次访问|通知过滤器.上次访问|通知过滤器.大小;观察者。过滤器='* '。txt ';观察者。已创建=委托(对象源,文件系统事件参数e){ 0控制台WriteLine(“”创建新的文件:“日期时间”.现在。ToString());缓存。更新(10);};观察者。已更改=委托(对象源,文件系统事件参数e){ 0控制台WriteLine(“”文件修改:“日期时间”.现在。ToString());缓存。更新(20);};观察者删除=代表(对象源,文件系统事件参数(e) {控制台.WriteLine(“”文件删除":"日期时间现在。ToString());缓存。更新(30);};观察者。重命名=委托(对象源控制台.WriteLine(“”文件重命名":"日期时间现在。ToString());缓存。更新(40);};观察者启用事件=真}这个程序监听了特定目录下的文件创建,修改,删除,以及重命名。注意这里程序过滤了只监听。文本文件(文本文件)文件。然后我们用用一个程序去不但读取缓存数据复制代码代码如下:静态void Main(字符串[]个参数){ Run();for(int I=1;i=10000i ) { int值=缓存.get();控制台WriteLine(“”第我次取值: '值);线程。睡眠(3000);} } 启动文件的监听,然后不但得读取缓存数据。运行效果如下:对文件不做任何修改的情况下运行效果
创建和运行文件的渲染如下:。
重命名文件的效果如下:。
修改文件内容的效果如下:。
文件系统删除的效果如下:。
从上图可以看出,这个文件目录中对txt文件的每一次修改都会导致缓存数据的更新,这也达到了我们最初的目的。这些缓存数据依赖于这些文件系统。在座的各位可能都认为这是无稽之谈。写了这么多,内容其实很简单。作为小知识点分享。您可以专门查看文件系统监视器类的使用。示例代码下载
版权声明:ASP.NET发展中如何突破文件依赖缓存?是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。