在做web应用是使用缓存是很常见的,ASP.NET也提供了缓存的支持,在winform程序中用缓存就不是那么随处可见,其实在winform也很需要缓存的,现在的内存一般都比较大,缓存一些耗时的计算结果或查询结果,对于系统系能的提高是很明显的。
在使用缓存的键值集合中一般使用Hashtable和Dictionary,Dictionary类是泛型的,对于指定的类型可以免去转换操作,对于缓存来说也没什么用处,要缓存的类型只能是终极基类object,Hashtable和Dictionary都采用了哈希散列的,因此通过键可以很快访问到值,作为缓存集合是很合适的。
在程序中如果直接使用Hashtable和Dictionary作为缓存载体未免不是很好用,因此可以编写一个封装缓存功能的类,可以类似于Web中的Session功能,来实现缓存操作。
至少应该包含的函数有:
void Add(object key,object value);
void Remove(object key);
void Clear();
bool ContainsKey(object key);
T GetValue<T>(object key); //不采用泛型就应该是用object
使用缓存的场合:
1: 一个耗费大量计算时间得到的结果,且该结果会频繁或多次使用;
2: 大型数据库查询结果,查询结果会被多次使用,且查询的东西在短期内不变
3: 耗时创建的对象,且对象被多次使用;
4: 远程处理获得的对象,网络操作获取的结果。
要不要缓存的前提,缓存对象得到代价是否比较高,是否在较长时期内不会变动。越长时间不变且缓存对象获得代价越高,缓存对于性能的提高就越明显。
虽然winform一般都是富客户端,但在winform中使用缓存还是值得的,通过牺牲一点内存,得到大幅的性能提升。
在使用缓存的键值集合中一般使用Hashtable和Dictionary,Dictionary类是泛型的,对于指定的类型可以免去转换操作,对于缓存来说也没什么用处,要缓存的类型只能是终极基类object,Hashtable和Dictionary都采用了哈希散列的,因此通过键可以很快访问到值,作为缓存集合是很合适的。
在程序中如果直接使用Hashtable和Dictionary作为缓存载体未免不是很好用,因此可以编写一个封装缓存功能的类,可以类似于Web中的Session功能,来实现缓存操作。
至少应该包含的函数有:
void Add(object key,object value);
void Remove(object key);
void Clear();
bool ContainsKey(object key);
T GetValue<T>(object key); //不采用泛型就应该是用object
使用缓存的场合:
1: 一个耗费大量计算时间得到的结果,且该结果会频繁或多次使用;
2: 大型数据库查询结果,查询结果会被多次使用,且查询的东西在短期内不变
3: 耗时创建的对象,且对象被多次使用;
4: 远程处理获得的对象,网络操作获取的结果。
要不要缓存的前提,缓存对象得到代价是否比较高,是否在较长时期内不会变动。越长时间不变且缓存对象获得代价越高,缓存对于性能的提高就越明显。
虽然winform一般都是富客户端,但在winform中使用缓存还是值得的,通过牺牲一点内存,得到大幅的性能提升。