GridView实战二:使用ObjectDataSource数据源控件(自定义缓存机制实现Sort)

简介:

参考资料:http://www.cnblogs.com/fsjohnhuang/archive/2011/12/17/2291200.html

 因为使用ObjectDataSource自带的缓存机制无法实现排序功能,苦苦寻觅终于找到了解决方案。参考后觉得还是自己实操一下比较安心,下面是对《GridView实战二:使用ObjectDataSource数据源控件》的改进!!

  CL代码:

复制代码
 1 public class CL
2 {
3 private OdsDataManager om = new OdsDataManager();
4 private static string[] mainKey = {"ods"};
5
6 public CL()
7 {
8 }
9
10 public DataTable GetRecord(int maximumRows, int startRowIndex, string sortExpression)
11 {
12 DataTable dt = HttpRuntime.Cache[GetCacheKey(Convert.ToString(maximumRows) + startRowIndex)] as DataTable;
13 if (dt == null)
14 {
15 dt = om.GetRecord(maximumRows, startRowIndex, sortExpression);
16 AddCache(Convert.ToString(maximumRows) + startRowIndex, dt);
17 }
18 if (!string.IsNullOrEmpty(sortExpression))
19 {
20 DataTable tempDt = dt.Clone();
21 DataRow[] drs = dt.Select("",sortExpression);
22 foreach (DataRow dr in drs)
23 {
24 tempDt.Rows.Add(dr.ItemArray);
25 }
26 dt = tempDt;
27 }
28
29 return dt;
30 }
31
32 public int GetRecordCount()
33 {
34 return om.GetRecordCount();
35 }
36
37 public bool UpdateRecord(int ID, string Name, string Sex, string Country, string Hobby)
38 {
39 RemoveCache();
40 return om.UpdateRecord(ID,Name,Sex,Country,Hobby);
41 }
42
43 public bool DelRecord(int ID)
44 {
45 RemoveCache();
46 return om.DelRecord(ID);
47 }
48
49 public DataTable GetCountry()
50 {
51 DataTable countryDt = HttpRuntime.Cache["countryDt"] as DataTable;
52 return countryDt;
53 }
54
55 public DataTable GetHobby()
56 {
57 DataTable hobbyDt = HttpRuntime.Cache["hobbyDt"] as DataTable;
58 return hobbyDt;
59 }
60
61 private void AddCache(string key, object data)
62 {
63 System.Web.Caching.Cache dc = HttpRuntime.Cache;
64 if (dc[mainKey[0]] == null)
65 dc.Insert(mainKey[0], DateTime.Now);
66
67 System.Web.Caching.CacheDependency cd = new System.Web.Caching.CacheDependency(null, mainKey);
68 dc.Insert(GetCacheKey(key), data, cd, System.Web.Caching.Cache.NoAbsoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration);
69 }
70
71 private void RemoveCache()
72 {
73 System.Web.Caching.Cache dc = HttpRuntime.Cache;
74 if (dc[mainKey[0]] != null)
75 dc[mainKey[0]] = DateTime.Now;
76 }
77
78 private string GetCacheKey(string key)
79 {
80 return mainKey[0] + "-" + key;
81 }
82 }
复制代码

 

实现预加载(proactive loading)
Global.asax

复制代码
 1     void Application_Start(object sender, EventArgs e) 
2 {
3 // 在应用程序启动时运行的代码
4 OdsDataManager om = new OdsDataManager();
5 HttpRuntime.Cache.Insert("countryDt", om.GetCountry(), null,
6 System.Web.Caching.Cache.NoAbsoluteExpiration,
7 System.Web.Caching.Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, null);
8 HttpRuntime.Cache.Insert("hobbyDt", om.GetHobby(), null,
9 System.Web.Caching.Cache.NoAbsoluteExpiration,
10 System.Web.Caching.Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, null);
11 om = null;
12 }
复制代码



如果您觉得本文的内容有趣就扫一下吧!捐赠互勉!


本文转自^_^肥仔John博客园博客,原文链接:http://www.cnblogs.com/fsjohnhuang/archive/2011/12/19/2292947.html,如需转载请自行联系原作者

相关文章
|
5月前
|
缓存 并行计算 PyTorch
PyTorch CUDA内存管理优化:深度理解GPU资源分配与缓存机制
本文深入探讨了PyTorch中GPU内存管理的核心机制,特别是CUDA缓存分配器的作用与优化策略。文章分析了常见的“CUDA out of memory”问题及其成因,并通过实际案例(如Llama 1B模型训练)展示了内存分配模式。PyTorch的缓存分配器通过内存池化、延迟释放和碎片化优化等技术,显著提升了内存使用效率,减少了系统调用开销。此外,文章还介绍了高级优化方法,包括混合精度训练、梯度检查点技术及自定义内存分配器配置。这些策略有助于开发者在有限硬件资源下实现更高性能的深度学习模型训练与推理。
935 0
|
7月前
|
存储 缓存 分布式计算
【赵渝强老师】Spark RDD的缓存机制
Spark RDD通过`persist`或`cache`方法可将计算结果缓存,但并非立即生效,而是在触发action时才缓存到内存中供重用。`cache`方法实际调用了`persist(StorageLevel.MEMORY_ONLY)`。RDD缓存可能因内存不足被删除,建议结合检查点机制保证容错。示例中,读取大文件并多次调用`count`,使用缓存后执行效率显著提升,最后一次计算仅耗时98ms。
154 0
【赵渝强老师】Spark RDD的缓存机制
|
8月前
|
存储 缓存 Java
Java中的分布式缓存与Memcached集成实战
通过在Java项目中集成Memcached,可以显著提升系统的性能和响应速度。合理的缓存策略、分布式架构设计和异常处理机制是实现高效缓存的关键。希望本文提供的实战示例和优化建议能够帮助开发者更好地应用Memcached,实现高性能的分布式缓存解决方案。
150 9
|
10月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
10月前
|
存储 缓存 监控
后端开发中的缓存机制:深度解析与最佳实践####
本文深入探讨了后端开发中不可或缺的一环——缓存机制,旨在为读者提供一份详尽的指南,涵盖缓存的基本原理、常见类型(如内存缓存、磁盘缓存、分布式缓存等)、主流技术选型(Redis、Memcached、Ehcache等),以及在实际项目中如何根据业务需求设计并实施高效的缓存策略。不同于常规摘要的概述性质,本摘要直接点明文章将围绕“深度解析”与“最佳实践”两大核心展开,既适合初学者构建基础认知框架,也为有经验的开发者提供优化建议与实战技巧。 ####
|
9月前
|
缓存 Java 数据库连接
深入探讨:Spring与MyBatis中的连接池与缓存机制
Spring 与 MyBatis 提供了强大的连接池和缓存机制,通过合理配置和使用这些机制,可以显著提升应用的性能和可扩展性。连接池通过复用数据库连接减少了连接创建和销毁的开销,而 MyBatis 的一级缓存和二级缓存则通过缓存查询结果减少了数据库访问次数。在实际应用中,结合具体的业务需求和系统架构,优化连接池和缓存的配置,是提升系统性能的重要手段。
338 4
|
9月前
|
缓存 Java 数据库连接
MyBatis缓存机制
MyBatis提供两级缓存机制:一级缓存(Local Cache)默认开启,作用范围为SqlSession,重复查询时直接从缓存读取;二级缓存(Second Level Cache)需手动开启,作用于Mapper级别,支持跨SqlSession共享数据,减少数据库访问,提升性能。
141 1
|
11月前
|
存储 缓存 负载均衡
Nginx代理缓存机制
【10月更文挑战第2天】
277 4
|
4月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
4月前
|
缓存 NoSQL Java
Redis+Caffeine构建高性能二级缓存
大家好,我是摘星。今天为大家带来的是Redis+Caffeine构建高性能二级缓存,废话不多说直接开始~
642 0