在ASP.NET中,缓存(Caching)是一种常用的技术,用于提高应用程序的性能和响应速度,通过缓存,我们可以将频繁访问的数据或计算结果存储在内存中,以便下次访问时可以直接从缓存中获取,从而减少数据库或服务器的负载,本文将详细介绍ASP.NET中Cache操作类的实例,帮助开发者更好地理解和应用缓存技术。
Cache操作类
ASP.NET提供了对象,它是一个全局的缓存机制,允许开发者存储和检索数据。对象是
System.Web.Caching
命名空间下的一个类,它提供了丰富的属性和方法来管理缓存数据。
Cache对象的基本操作
添加数据到缓存
要将数据添加到缓存,可以使用方法,以下是一个简单的示例:
Cache.Insert("key", "value", null, dateTime.Now.AddMinutes(10), Cache.NoSlidingExpiration);
在这个例子中,我们添加了一个键为”key”的缓存项,其值为”value”,缓存项将在10分钟后过期。
从缓存中检索数据
要从缓存中检索数据,可以使用方法:
object value = Cache["key"];
如果缓存中存在键为”key”的项,将包含该项的值。
删除缓存项
如果需要从缓存中删除特定的项,可以使用方法:
Cache.Remove("key");
这将删除键为”key”的缓存项。
Cache对象的高级操作
使用依赖项
缓存项可以与文件、目录或数据库等依赖项关联,当依赖项发生变化时,相关的缓存项也会被自动删除,以下是如何设置文件依赖项的示例:
string filePath = @"C:pathtofile.txt";Cache.Insert("key", "value", new System.Web.Caching.FileDependency(filePath), DateTime.Now.AddMinutes(10), Cache.NoSlidingExpiration);
使用滑动过期
滑动过期允许缓存项在指定的时间后过期,而不是在添加到缓存时设置的时间,以下是如何设置滑动过期的示例:
Cache.Insert("key", "value", null, Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(10));
在这个例子中,缓存项将在10分钟后过期,但如果有对该缓存项的访问,其过期时间将重新计算。
表格示例
| 操作 | 方法 | 参数 | 说明 |
|---|---|---|---|
| 添加 | Cache.Insert | key, value, dependencies, absoluteExpiration, slidingExpiration | 将数据添加到缓存 |
| 检索 | 从缓存中检索数据 | ||
| 删除 | Cache.Remove | 从缓存中删除数据 |
Q1:缓存和会话有什么区别?
缓存和会话都是ASP.NET中用于存储数据的机制,但它们有不同的用途,缓存是全局的,可以被应用程序中的所有页面和请求访问,而会话是针对单个用户的,每个用户都有自己的会话数据。
Q2:缓存过期后会发生什么?
当缓存项过期后,它将不再可用,如果应用程序尝试访问一个已过期的缓存项,它将重新从原始数据源(如数据库或文件)中检索数据,并将其添加到缓存中,这样可以确保缓存中的数据始终是最新的。
什么是sdn技术专线方案?
SDN技术网络专线,即软件定义广域网(SD-WAN),是将SDN技术应用到广域网场景中所形成的一种服务,这种服务用于连接广阔地理范围的企业网络、数据中心、互联网应用及云服务。
SD-WAN专线通过将网络硬件与其控制机制分离来简化WAN的管理和操作。 SD-WAN的关键应用是允许公司使用低成本的互联网接入来构建更高性能的WAN;通过替换掉部分或全部昂贵的广域网专用链路,比如MPLS。
SD-WAN方案基于广域网基础进行优化,结合LCX平台,在国内外部署了近百个接入点,通过自主纠错冗余算法,减少广域网链路开销,给租户提供可靠稳定的基础网络。 只需在租户节点简单部署Client盒子终端,即可通过Internet就近接入服务端节点,结合LCX平台,轻松打通至企业总部、公有云或IDC机房,完成企业组网需求。
SD-WAN解决方案以SDN技术为基础,以企业专线网络市场为导向,以客户为中心的服务宗旨,为广大企业公司、工厂、学校提供高品质的国际专线网络产品与服务。
在ASP.NET中 访问站点时,保存应用信息的对象是?
在中,有很多种保存信息的内置对象,如:Application,session,Cookie,ViewState和Cache等。 下面分别介绍它们的用法和区别。 方法信息量大小作用域和保存时间应用范围保存位置Application任意大小整个应用程序的生命期整个应用程序/所有用户服务器端Cache任意大小可以根据需要设定整个应用程序/所有用户服务器端Session小量,简单的数据用户活动时间+一段延迟时间(一般为20分钟)单个用户服务器端Cookie小量,简单的数据可以根据需要设定单个用户客户端Viewstate小量,简单的数据一个Web页面的生命期单个用户客户端隐藏域小量,简单的数据一个Web页面的生命期单个用户客户端查询字符串小量,简单的数据直到下次页面跳转请求单个用户客户端对象Application用于保存所有用户的公共的数据信息,如果使用Application对象,一个需要考虑的问题是任何写操作都要在Application_OnStart事件()中完成.尽管使用和方法来避免写操作的同步,但是它串行化了对Application对象的请求,当网站访问量大的时候会产生严重的性能瓶颈.因此最好不要用此对象保存大的数据集合. 下面我们做个在线用户统计的例子来说明这个问题:(以文件的形式存放网站总访问量)//类using System;using ;using ;using ;using ;using ;/// Global 的摘要说明。 publicclass Global : {///必需的设计器变量。 private components = null;private FileStream fileStream;private StreamReader reader;//读字符流private StreamWriter writer;//写字符流public Global(){InitializeComponent();}protected void Application_Start(Object sender, EventArgs e){Application[CurrentGuests]=0;//初始花为0;fileStream = ((),);//文件不存在,创建文件reader = new StreamReader(fileStream);//要读取的完整路径Application[AllGuests] = 32(()); //从当前流中读取一行字符并将数据作为字符串返回();//关闭流}protected void Session_Start(Object sender, EventArgs e)//当用户访问网站时,在线用户+1,总访问数+1{();//同步,避免同时写入Application[CurrentGuests] =(int)Application[CurrentGuests]+ 1;//总在线用户数Application[AllGuests] =(int)Application[AllGuests]+ 1;//访问网站的总用户数fileStream = new FileStream((),,);//writer = new StreamWriter(fileStream);//实现一个写入流,使其以一种特定的编码向流中写入字符(Application[AllGuests]());//把访问网站的总用户数再次写入到文件();//关闭写入流();//同步结束}protected void Session_End(Object sender, EventArgs e)//当前用户退出网站时,在线用户数量-1,{();Application[CurrentGuests] =(int)Application[CurrentGuests] - 1;//总在线用户数量();}(2) void Page_Load(object sender, e){ = 正在访问站点的用户数: + Application[CurrentGuests](); =访问过站点的总用户数: + Application[AllGuests]();}对象Session用于保存每个用户的专用信息.每个客户端用户访问时,服务器都为每个用户分配一个唯一的会话ID(Session ID) . 她的生存期是用户持续请求时间再加上一段时间(一般是20分钟左右)中的信息保存在Web服务器内容中,保存的数据量可大可小.当Session超时或被关闭时将自动释放保存的数据信息.由于用户停止使用应用程序后它仍然在内存中保持一段时间,因此使用Session对象使保存用户数据的方法效率很低.对于小量的数据,使用Session对象保存还是一个不错的选择.使用Session对象保存信息的代码如下://存放信息Session[key]=value//读取数据string UserName=Session[key]();对象Cookie用于保存客户浏览器请求服务器页面的请求信息,程序员也可以用它存放非敏感性的用户信息,信息保存的时间可以根据需要设置.如果没有设置Cookie失效日期,它们仅保存到关闭浏览器程序为止.如果将Cookie对象的Expires属性设置为Minvalue,则表示Cookie永远不会过期存储的数据量很受限制,大多数浏览器支持最大容量为4K,因此不要用来保存数据集及其他大量数据.由于并非所有的浏览器都支持Cookie,并且数据信息是以明文文本的形式保存在客户端的计算机中,因此最好不要保存敏感的,未加密的数据,否则会影响网站的安全性.使用Cookie对象保存的代码如下://存放信息[key]=value;//读取信息string UserID=[key];对象ViewState 常用于保存单个用户的状态信息,有效期等于页面的生存期。 跟隐藏控件相似。 viewstate是在本页面之内各函数间进行传值的 , 至于为什么要使用这种方法是因为在一个事件发生之后 , 页面可能会刷新 , 如果定义全局变量会被清零 , 所以要使用 viewstate. ViewState容器可以保持大量的数据,但是必须谨慎使用,因为过多使用会影响应用程序的性能。 所有Web服务器控件都使用ViewState在页面回发期音保存自己的状态信息。 如果某个控件不需要在回发期间保存状态信息,最好关闭该对象的ViewState,避免不必要的资源浪费。 通过给@Page指令添加“EnableViewState=false”属性可以禁止整个页面的ViewState。 使用ViewState对象保存信息的代码如下。 //存放信息ViewState[key]=value;//读取信息string NameID=ViewState[nameID]();对象Cache对象用于在HTTP请求间保存页面或数据。 该对象的使用可以极大地提高整个应用程序的效率。 常用于将频繁访问的大量服务器资源存储在内存中,当用户发出相同的请求后服务器不再次处理而是将Cache中保存的信息返回给用户,节省了服务器处理请求的时间。 其生存期依赖于该应用程序的生存期。 当重新启动应用程序时,将重新创建其Cache对象的实例。 使用Cache对象保存信息的代码如下。 //存放信息Cache[nameID]=0001;//存放信息(nameID,);//读取信息string NameID=Cache[nameID]();6.隐藏域Hidden控件是属于HTML类型的服务器控件,使用此控件可以实现隐藏域的功能。 其实此控件和其它服务器控件的使用没有太大区别,只是它不会在用户端的浏览器中显示,始终处于隐藏状态。 但是每次页面提交的时候,此控件和其它服务器控件一同提交到服务器端,因此在服务器端可以使用Value属性获取或保存一些数据信息。 使用Hidden控件保存信息的代码如下。 //存放信息=0001;//获取信息string NameID=;7.查询字符串查询字符串的方式是将要传递的值连接在URL后面,然后通过方法实现客户端的重定向。 这种方式可以实现在两个页面之间传递信息。 由于URL的长度有一定的限制,因此不能传递太大的信息,加外安全性也不是很好。 传递信息如下。 问号后面格式 key1=value1&key2=(?nameID=0001&gradeID=002);//执行上面的语句后在IE地址栏显示的URL的代码如下。 当跳转到后,可以通过以下代码获得所传递的信息。 string ;NameID=[nameID];GradeID=[gradeID];
磁盘清理与磁盘碎片整理程序作用一样吗?它会删除电脑上有用的文件
不会,给你介绍一下:一、什么是磁盘碎片? 其实磁盘碎片应该称为文件碎片,是因为文件被分散保存到整个磁盘的不同地方,而不是连续地保存在磁盘连续的簇中形成的。 [Blocked Ads] 当应用程序所需的物理内存不足时,一般操作系统会在硬盘中产生临时交换文件,用该文件所占用的硬盘空间虚拟成内存。 虚拟内存管理程序会对硬盘频繁读写,产生大量的碎片,这是产生硬盘碎片的主要原因。 其他如IE浏览器浏览信息时生成的临时文件或临时文件目录的设置也会造成系统中形成大量的碎片。 文件碎片一般不会在系统中引起问题,但文件碎片过多会使系统在读文件的时候来回寻找,引起系统性能下降,严重的还要缩短硬盘寿命。 另外,过多的磁盘碎片还有可能导致存储文件的丢失。 ================================================= 二、磁盘碎片是怎么产生的? 在磁盘分区中,文件会被分散保存到磁盘的不同地方,而不是连续地保存在磁盘连续的簇中。 又因为在文件操作过程中,Windows系统可能会调用虚拟内存来同步管理程序,这样就会导致各个程序对硬盘频繁读写,从而产生磁盘碎片。 ================================================= 三、磁盘读写操作的原理 知道了磁盘碎片的产生原因之后,我们还有必要了解一下程序运行时磁盘的读写动作。 一般运行一个程序时,磁盘驱动器的磁头所做的工作是先搜索该程序运行必需的文件,然后读取数据,最后做读后处理——将数据传送至磁盘高速缓存(Cache)和内存中。 搜索时间在硬盘性能指标中被称为平均寻道时间(Average seek time),单位为毫秒(ms),目前主流硬盘的平均寻道时间小于9.5ms。 如果能将应用程序的相关文件放在磁盘的连续空间内,磁头搜索的时间将会减少很多。 读取时也是如此,磁盘读取位于磁头下方扇区的数据所需时间仅为将磁头移到另一地点再读取相同数据所需时间的五分之一。 读盘时,系统先检查数据是否在高速缓存中,如果有则直接读取;如果没有则访问磁盘,也就是读盘。 当需要多次读取同一份数据时,Cache的作用很大,但对于第一次读取某个文件,Cache就无能为力了。 于是搜索时间和读取时间在很大程度上影响着程序执行的效率。 为何要整理磁盘 Windows系统并不能自动将每个文件按照最大程度减少磁头搜索时间的原则放到磁盘上最合适的位置。 于是Microsoft在Windows中加入了“Disk Defragment”(磁盘碎片整理程序),并提供了“TaskMonitor”(任务监视器)来跟踪程序启动过程中的磁盘活动,以利于“Disk Defragment”能够更有效地工作。 “TaskMonitor”是随Windows启动而自动运行的(当然要在“启动”中选中“TaskMonitor”)。 当加载某个应用程序时,它通过监视磁盘的访问动作来了解该程序启动时搜索和调用的文件,对所需文件进行定位,并将监视结果储存在“C:\Windows\Applog”隐藏目录中。 这个目录中的大多数文件以“”为扩展名,其中“lg”代表记录文件(Log File),“x”表示盘符,如D盘程序就以“”为扩展名;记录文件的文件名为TaskMonitor所监视的应用程序的文件名,如E盘上的WinZip程序记为“”。 用户进行磁盘碎片整理时,该程序会根据Applog目录中的信息把应用程序的相关文件移动到磁盘上的连续空间内。 TaskMonitor仅在程序加载过程中对文件信息进行搜索,并且根据程序的加载频率调整优化的顺序,也就是说使用次数最多的软件可获得最多的关照。 Applog目录中的文件就记录了应用程序运行的次数。 用户需要将常用软件多次启动,接受TaskMonitor的监视和记录,再使用Disk Defragment进行整理,才能真正实现程序启动速度的提高。 但如果用户中途改变了常用软件,比如以前常用WinZip,现在改用ZipMagic,那么在相当长的时间内Disk Defragment还是先把与WinZip相关的文件移到连续的空间内,而不是ZipMagic,除非ZipMagic的加载次数超过WinZip。 要解决这个问题,用户可将“”文件删除,记录文件不存在了,Disk Defragment也就不会去优化它了。 ================================================= 四、该不该定期整理硬盘? 实际上,定期整理硬盘应该是毫无疑问的。 如果说硬盘碎片整理真的会损害硬盘的话,那也将是在对硬盘进行近乎天文数字般次数的整理之后。 硬盘使用的时间长了,文件的存放位置就会变得支离破碎——文件内容将会散布在硬盘的不同位置上。 这些“碎片文件”的存在会降低硬盘的工作效率,还会增加数据丢失和数据损坏的可能性。 碎片整理程序把这些碎片收集在一起,并把它们作为一个连续的整体存放在硬盘上。 Windows自带有这样的程序:磁盘碎片整理程序(DiskDefragmenter),但在工具软件NortonUtilities和Nuts&Bolts中有更好的此类程序。 然而,碎片整理对硬盘里的运转部件来说的确是一项不小的工作。 如果硬盘已经到了它生命的最后阶段,碎片整理的确有可能是一种自杀行为。 但在这种情况下,即使您不进行碎片整理,硬盘也会很快崩溃的。 实际上在大多数情况下,定期的硬盘碎片整理减少了硬盘的磨损。 不管怎么说,让硬盘的磁头从1处读取文件总比从8处读取要容易得多。 因此,一个每两周或四周整理一次的硬盘的寿命应当比一个永远不整理的硬盘长。 ================================================= 五、整理前的准备工作 我们在整理硬盘前一般都要对它清理垃圾信息,检查有无错误,最后才能谈到碎片的整理和优化。 因此,我们在整理硬盘前,应该首先做好这些工作: 1、应该把硬盘中的垃圾文件和垃圾信息清理干净。 系统工作一段时间后,垃圾文件就会非常之多,有程序安装时产生的临时文件、上网时留下的缓冲文件、删除软件时剩下的DLL文件或强行关机时产生的错误文件等,建议“菜鸟”朋友还是使用微软的“磁盘清理程序”代劳,“老鸟”当然可以使用一些功能更强的软件或手工清理。 2、检查并修复硬盘中的错误。 首选的仍然是微软的“磁盘扫描程序”,虽然它的速度实在不怎么样,但只要你有足够的耐心,经过这个程序对磁盘完整而详细的扫描后,相信系统中的绝大多数错误已经被修复了。 当然你也可以尝试一下其他工具,如扁鹊神医“Norton WinDoctor”,它的速度可比Windows中的“磁盘扫描工具”快多了。 ================================================= 六、整理方法及注意 在Windows里,用户可以从“开始”菜单中选择“程序/附件/系统工具/磁盘碎片整理程序”,弹出选择驱动器窗口,选择要整理的分区,然后点击[确定]即可开始整理,但此方法碎片整理过程非常耗时,一般2GB左右的分区需要1个小时以上,所以建议读者: 1、整理磁盘碎片的时候,要关闭其他所有的应用程序,包括屏幕保护程序,最好将虚拟内存的大小设置为固定值。 不要对磁盘进行读写操作,一旦Disk Defragment发现磁盘的文件有改变,它将重新开始整理。 2、整理磁盘碎片的频率要控制合适,过于频繁的整理也会缩短磁盘的寿命。 一般经常读写的磁盘分区一周整理一次。 ================================================= 七、磁盘扫描程序的命令参数 命令参数在 DOS时代可以说是一项基本的技能,很多程序都要靠命令参数来启动,而到了图形化界面时代,已很难再见到其踪迹,但它却实实在在地存在着,而且发挥着不小的作用。 如很多 Windows游戏的设置程序就是用 /Setup 参数来实现的。 通常我们不会太留意某些程序的命令参数,但他们往往包含着某些隐秘的功能,如果运用适当对你很有帮助。 Windows 中的磁盘扫描程序就包含着许多命令参数,你可以在MS_DOS方式下或在“运行”对话框中实现,如果需要经常用命令参数,还可以建立一个快捷方式。 /SILENT 启动磁盘扫描程序不允许作任何选项设置和高级设置。 /A 检查所有的本地硬盘 /N 自动启动和退出磁盘扫描程序 /P 防止磁盘扫描程序修复所发现的错误 X: X 表示指定要检查的驱动器号(不需要 / 的命令参数) 举例: 1)检查驱动器 E 并自动启动和退出磁盘扫描程序 SCANDSKW E: /N 2)检查所有的硬盘并防止磁盘扫描程序修复发现的任何错误 SCANDSKW /A /P ================================================= 八、运行过其他文件整理程序怎么办 当运行了其他磁盘文件整理程序(如WinAlign)后,它可能扰乱了TaskMon记录的数据,若此时直接进行碎片整理,可能会得不偿失,达不到优化性能的目的。 解决的办法是在进行碎片整理之前,多次运行Windows和自己最常用的程序,这样可以让TaskMon重新收集到正确的统计数据,指导进行磁盘优化。 最后,当启动Windows98的磁盘碎片整理程序时,可能会诧异界面中的Intel标志。 为什么处理器的生产厂商会参与编写这个优化磁盘的软件呢?这是因为硬盘寻道时间的缓慢会导致系统整体性能的下降,这样会有损CPU超级计算能力的形象,让人误以为是CPU性能的低下。 Microsoft的一个测试表明,在奔腾233的机器上启动Windows仅仅比奔腾150快3%,也就是说,快速的CPU并不能克服磁盘延迟的缺点。 于是,在共同利益的驱动下,Intel和Microsoft联合开发了Windows98的磁盘碎片整理程序,用来消除硬盘寻道缓慢的瓶颈。 ================================================= 九、如何快速地整理磁盘碎片 每次需要整理磁盘碎片时都需要选择“开始”*“程序”*“附件”*“系统工具”*“磁盘碎片整理程序”,然后再指定驱动器,很麻烦。 能否有简单的方法完成这一系列操作? 在Windows资源管理器中,选择“查看”*“文件夹选项”(或“查看”*“选项”),选择“文件类型”选项卡,并在“已注册的文件类型”列表中选择“驱动器”。 单击“编辑”按钮,打开“编辑文件类型”对话框,选择“新建”,在“操作”栏中,键入“快速整理磁盘碎片”。 在“用于执行操作的应用程序”栏中键入“C:\Windows\ %1 \noprompt”。 单击“确定”,然后“关闭”,回到“文件类型”选项卡,然后单击“关闭”。 现在,打开“我的电脑”,右键单击想要整理磁盘碎片的驱动器,在弹出的快捷菜单中选择“快速整理磁盘碎片”即可。














发表评论