关于WinForm/Web如何使用缓存Cach
原文链接:http://www.cnblogs.com/zfanlong1314/archive/2013/03/28/2986403.html
HttpRuntime.Cache与HttpContext.Current.Cache 为同一个对象
HttpRuntime.Cache.Add 存在相同的键会异常,返回缓存成功的对象 HttpRuntime.Cache.Insert存在相同的键会替换无返回值
HttpRuntime.Cache["key"] 使用字典的方式也可以读取和设置
HttpRuntime.Cache.Insert(key, value, null, DateTime.Now.AddSeconds(seconds), TimeSpan.Zero); //设置绝对过期时间 到了指定时间以后会失效 ps: TimeSpan.Zero == System.Web.Caching.Cache.NoSlidingExpiration
HttpRuntime.Cache.Insert(key, value, null, DateTime.MaxValue, TimeSpan.FromSeconds(seconds)); //设置相对过期时间 指定时间内无访问会失效 ps: DateTime.MaxValue == System.Web.Caching.Cache.NoAbsoluteExpiration
本文参考:http://blog.csdn.net/ttotcs/article/details/7476234
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
System.Web.HttpRuntime.Cache的方法:AddInsertGetRemove 缓存的操作包括:读、写。读取缓存内容调用System.Web.HttpRuntime.Cache.Get(Key)方法,插入缓存数据调用Add或Insert方法。 Add与Insert的不同HttpRuntime.Cache.Add 存在相同的键会异常,返回缓存成功的对象。HttpRuntime.Cache.Insert存在相同的键会替换原值,无返回值。如果您希望某个缓存项目一旦放入缓存后,就不要再被修改,那么调用Add确实可以防止后来的修改操作。而调用Insert方法,则永远会覆盖已存在项。 缓存的过期时间缓存过期时间包括:绝对过期和滑动过期。绝对过期:到了指定时间以后便会失效。滑动过期:在指定时间内无访问请求便失效。实例:绝对过期:HttpRuntime.Cache.Insert(key, value, null, DateTime.Now.AddSeconds(seconds),System.Web.Caching.Cache.NoSlidingExpiration);滑动过期:HttpRuntime.Cache.Insert(key, value, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(seconds));缓存项移除优先级// 指定 Cache 对象中存储的项的相对优先级。public enum CacheItemPriority{ // 在服务器释放系统内存时,具有该优先级级别的缓存项最有可能被从缓存删除。 Low = 1, // 在服务器释放系统内存时,具有该优先级级别的缓存项比分配了 CacheItemPriority.Normal // 优先级的项更有可能被从缓存删除。 BelowNormal = 2, // 在服务器释放系统内存时,具有该优先级级别的缓存项很有可能被从缓存删除, // 其被删除的可能性仅次于具有 CacheItemPriority.Low // 或 CacheItemPriority.BelowNormal 优先级的那些项。这是默认选项。 Normal = 3, // 缓存项优先级的默认值为 CacheItemPriority.Normal。 Default = 3, // 在服务器释放系统内存时,具有该优先级级别的缓存项被删除的可能性 // 比分配了 CacheItemPriority.Normal 优先级的项要小。 AboveNormal = 4, // 在服务器释放系统内存时,具有该优先级级别的缓存项最不可能被从缓存删除。 High = 5, // 在服务器释放系统内存时,具有该优先级级别的缓存项将不会被自动从缓存删除。 // 但是,具有该优先级级别的项会根据项的绝对到期时间或可调整到期时间与其他项一起被移除。 NotRemovable = 6,} |
参考文章 http://kb.cnblogs.com/page/69483/
http://www.cnblogs.com/zgx/archive/2009/03/16/1413643.html
http://www.cnblogs.com/zhangxp1129/archive/2012/09/05/2671522.html
MSDN: http://msdn.microsoft.com/zh-cn/magazine/system.web.caching.cache(VS.85).aspx
对于每个应用程序域均创建该类的一个实例,并且只要对应的应用程序域保持活动,该实例便保持有效。
注意: |
|---|
|
Cache 类不能在 ASP.NET 应用程序外使用。它是为在 ASP.NET 中用于为 Web 应用程序提供缓存而设计和测试的。在其他类型的应用程序(如控制台应用程序或 Windows 窗体应用程序)中,ASP.NET 缓存可能无法正常工作。 |
System.Web.Caching是用来管理缓存的命名空间,其父级空间是System.Web,由此可见,缓存通常用于Web网站的开发,包括在B/S项目中的开发。
缓存的设计主要是考虑到网络带宽可能会延缓数据的提交与回发,如果把数据保存在客户端,用户就可以直接从客户端读取数据,减少客户端与服务器端的数据交互,提高程序的性能。
那么System.Web.Caching可以使用到WinForm程序中吗?
如果用的是winform,基本上不用想这个问题,因为你的程序本身就在内存里运行着。winfrom 直接用内存用 数据字典如果是
web,缓存就是将常用的数据放到服务器的内存中,当有不同的客户请求相同的数据时,直接从内存读取,以此提高性能。
简单点:WebForm是“瘦客户端”,占用服务器资源。WinForm是“胖客户单”,占用的是本地客户端内存。
推荐两种写法:
一、是web项目中如何使用。
本文转载:http://www.cnblogs.com/wgx0428/p/3181307.html/// <summary> /// 获取数据缓存 /// </summary> /// <param name="CacheKey">键</param> public static object GetCache(string CacheKey) { System.Web.Caching.Cache objCache = HttpRuntime.Cache; return objCache[CacheKey]; } /// <summary> /// 设置数据缓存 /// </summary> public static void SetCache(string CacheKey, object objObject) { System.Web.Caching.Cache objCache = HttpRuntime.Cache; objCache.Insert(CacheKey, objObject); } /// <summary> /// 设置数据缓存 /// </summary> public static void SetCache(string CacheKey, object objObject, TimeSpan Timeout) { System.Web.Caching.Cache objCache = HttpRuntime.Cache; objCache.Insert(CacheKey, objObject, null, DateTime.MaxValue, Timeout, System.Web.Caching.CacheItemPriority.NotRemovable, null); } /// <summary> /// 设置数据缓存 /// </summary> public static void SetCache(string CacheKey, object objObject, DateTime absoluteExpiration, TimeSpan slidingExpiration) { System.Web.Caching.Cache objCache = HttpRuntime.Cache; objCache.Insert(CacheKey, objObject, null, absoluteExpiration, slidingExpiration); } /// <summary> /// 移除指定数据缓存 /// </summary> public static void RemoveAllCache(string CacheKey) { System.Web.Caching.Cache _cache = HttpRuntime.Cache; _cache.Remove(CacheKey); } /// <summary> /// 移除全部缓存 /// </summary> public static void RemoveAllCache() { System.Web.Caching.Cache _cache = HttpRuntime.Cache; IDictionaryEnumerator CacheEnum = _cache.GetEnumerator(); while (CacheEnum.MoveNext()) { _cache.Remove(CacheEnum.Key.ToString()); } } |
二、是winform程序中
(1)静态变量缓存:
namespace HZ
{
using System.Collections.Generic;
/// <summary>
/// 全局统一的缓存类
/// </summary>
public class Cache
{
private SortedDictionary<string, string> dic = new SortedDictionary<string, string>();
private static volatile Cache instance = null;
private static object lockHelper = new object();
private Cache()
{
}
public void Add(string key, string value)
{
dic.Add(key, value);
}
public void Remove(string key)
{
dic.Remove(key);
}
public string this[string index]
{
get
{
if (dic.ContainsKey(index))
return dic[index];
else
return null;
}
set { dic[index] = value; }
}
public static Cache Instance
{
get
{
if (instance == null)
{
lock (lockHelper)
{
if (instance == null)
{
instance = new Cache();
}
}
}
return instance;
}
}
}
}
(2)内存缓存MemoryCach:表示实现内存中的缓存的类型。(注意此类仅仅NET4.0以上支持)
本文转载:http://www.cnblogs.com/jinzhao/archive/2012/06/11/2545450.htmlusing System;using System.Collections.Generic;using System.Linq;using System.Runtime.Caching;using System.Text; namespace CNBlogs.Zzk.Domain.Entities{ public class DictionaryCacheManager<TK, TV> { private ObjectCache memoryCache; public DictionaryCacheManager():this(null){} public DictionaryCacheManager(string name) { memoryCache = new MemoryCache(string.Format("{0}-{1}-{2}", typeof (TK).Name, typeof (TV).Name, name)); } public TV Get(TK key,Func<TV> getValue) { if(memoryCache.Contains(key.ToString())) { return (TV)memoryCache[key.ToString()]; } else { var policy = new CacheItemPolicy(); var v = getValue(); object o = v; memoryCache.Set(key.ToString(), o, policy); return v; } } public TV Get(TK key, Func<TV> getValue,DateTimeOffset dateTimeOffset) { if (memoryCache.Contains(key.ToString())) { return (TV)memoryCache[key.ToString()]; } else { var v = getValue(); object o = v; memoryCache.Set(key.ToString(), o, dateTimeOffset); return v; } } public void Clear() { memoryCache.ToList().ForEach(kv => memoryCache.Remove(kv.Key)); } public void Clear(TK key) { memoryCache.Remove(key.ToString()); } }} |
关于WinForm/Web如何使用缓存Cach的更多相关文章
- Nginx作为静态资源web服务之缓存原理
Nginx作为静态资源web服务之缓存原理 大致理一下http浏览器缓存原理: 浏览器第一次请求服务器,此时浏览器肯定没有缓存,则直接调用服务器端,服务器在返回的信息的信息头中添加 ETag和Last ...
- Web前后端缓存技术(缓存的主要作用是什么)
Web前后端缓存技术Web前后端缓存技术(缓存的主要作用是什么) 一.总结 一句话总结: 加快页面打开速度 减少网络带宽消耗 降低服务器压力 1.在Web应用中,应用缓存的地方有哪些? 主要有浏览器缓 ...
- HTML5之应用缓存---manifest---缓存使用----Web前端manifest缓存
相信来查这一类问题的都是遇到问题或者是初学者吧! 没关系相信你认真看过之后就会知道明白的 这是HTML5新加的特性 HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连 ...
- 【.net深呼吸】非 Web 项目使用缓存
从.net 4 开始,非web项目也可以使用缓存技术,故曰:.net 4 乃框架成熟之标志也. 对于缓存嘛,耍过 ASP.NET 的伙伴们肯定知道,这么说吧,就是将一些使用频率较高的数据放于内存中,并 ...
- 大型web系统数据缓存设计
1. 前言 在高访问量的web系统中,缓存几乎是离不开的:但是一个适当.高效的缓存方案设计却并不容易:所以接下来将讨论一下应用系统缓存的设计方面应该注意哪些东西,包括缓存的选型.常见缓存系统的特点和数 ...
- Web集群缓存一致性的思考
共享cache+数据库实现缓存一致性: 1.1 memcache + mongo+定时器 1.1.1 memcache 优点:web集群共享数据 缺点:数据生命周期的不可预估性 1.1.2 mongo ...
- Web浏览器的缓存机制
Web缓存的工作原理 所有的缓存都是基于一套规则来帮助他们决定什么时候使用缓存中的副本提供服务(假设有副本可用的情况下,未被销毁回收或者未被删除修改).这些规则有的在协议中有定义(如HTTP协议1.0 ...
- 利用 NGINX 最大化 Python 性能,第一部分:Web 服务和缓存
[编者按]本文主要介绍 nginx 的主要功能以及如何通过 NGINX 优化 Python 应用性能.本文系国内 ITOM 管理平台 OneAPM 编译呈现. Python 的著名之处在于使用简单方便 ...
- ASP.Net Web API 输出缓存 转载 -- Output caching in ASP.NET Web API
一.Nuget安装相关dll Web API 2 : Install-Package Strathweb.CacheOutput.WebApi2 Web API 1 : Install-Package ...
随机推荐
- C# winform DataTable 批量数据处理 增、删、改 .
1.批量新增,采用高效的SqlBulkCopy SqlBulkCopy DTS = new System.Data.SqlClient.SqlBulkCopy(con); DTS.NotifyAfte ...
- 网站压缩数据 GZIP
//1.被压缩数据 String str="Hello 你好Hello 你好Hello 你好Hello 你好Hello 你好Hello 你好Hello 你好Hello 你好Hello 你好H ...
- 指针与数组、大小端之 printf("%x,%x,%x\n",*(a+1),ptr1[-1],*ptr2);
在X86系统下,以下程序输出的值为多少? #include <stdio.h> #include <stdlib.h> int main(void) { ]={,,,,}; ) ...
- vi使用入门指南
一.Unix编辑器概述 编辑器是使用计算机的重要工具之一,在各种操作系统中,编辑器都是必不可少的部件.Unix及其相似的ix操作系统系列中,为方便各种用户在各个不同的环境中使用,提供了一系列的ex编辑 ...
- cf C. Prime Number
http://codeforces.com/contest/359/problem/C 先求出分子的公因子,然后根据分子上会除以公因子会长生1,然后记录1的个数就可以. #include <cs ...
- 目测ZIP的压缩率
对word文件,能压到25% 对PDF文件,却只有90% 对压缩文件本身再压缩,几乎没有效果. 考虑到用户一般情况下只有正常的文档,取中位值66%是比较正常的情况,特别是在预估原文件大小的时候.
- Qt在Mac OS X下的编程环境搭建
尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/46234079 在Mac OS X下使用Qt开发,需要 ...
- Windows 8.1 explorer.exe总是崩溃的解决办法
方法1 卸载此补丁 KB3033889 方法2 打补丁, 更新 3033889 导致使用日语. 朝鲜语和中文输入法的系统中 Windows 资源管理器停止响应 https://support.micr ...
- WCF的执行过程
既然是实现互通信.那么肯定会有概念意义上的服务端Server 和概念意义上的客户端 Client,在这里,我所说明的都是概念意义上的,单独强调此,是因为,基于WCF的通信没有物理上的划分,但是概念上 ...
- javascript学习笔记——chrome等提示找不到“getElementsByTagName”的一种解决方法
最近学习是写了一个小网页,前台有个下拉框是通过后天的xml配置的,在写好代码后使用发现在IE9以及之前的IE浏览器都可以正常获取,但是IE10,chrome和firefox都会在获取一个标签时报get ...
注意: