我目前有一个名为MyGridview的控件继承Gridview。它内部有一个用于自定义分页选项的分页模板,而且我希望缓存初始数据源以获得更好的性能。ASP.net:Gridview数据源缓存问题
我很长一段时间没有这样做过,所以现在可能有更新的框架有不同的解决方案。之前,我只是使用了一个名为GridView的命名的Cache对象。虽然我无法通过应用程序使用相同的gridview名称。
是否有一种最佳方式来让缓存对象或控件中的会话等其他对象存储用于分页和排序的独特数据集?
我目前有一个名为MyGridview的控件继承Gridview。它内部有一个用于自定义分页选项的分页模板,而且我希望缓存初始数据源以获得更好的性能。ASP.net:Gridview数据源缓存问题
我很长一段时间没有这样做过,所以现在可能有更新的框架有不同的解决方案。之前,我只是使用了一个名为GridView的命名的Cache对象。虽然我无法通过应用程序使用相同的gridview名称。
是否有一种最佳方式来让缓存对象或控件中的会话等其他对象存储用于分页和排序的独特数据集?
由于您正在谈论自定义控件,因此我建议将其抽象化,以便使用该应用程序的任何人都可以定义自己的策略。定义一个接口:
public interface IGridCaching {
object LoadCache();
void SaveCache(object data);
}
创建一个默认实现DefaultGridCaching并实现你想要的解决方案,并将其作为网格的属性:
public IGridCaching Caching
{
get { return this._caching ?? new DefaultGridCaching(); }
set { this._caching = value; }
}
然后它变成定制。没有一个巨大的变化;缓存仍然是一个不错的选择。使用企业库缓存块是另一种缓存解决方案。但这样,缓存是可定制的。
HTH。
让我问这个......假设我这样做,缓存密钥最终在两个数据源中是相同的。数据将被覆盖在缓存中,这就是我想要避免的。有没有解决方案可以确保链接到当前控件实例的唯一键? – jlrolin 2010-09-16 15:37:13
除了网格视图ID之外,将用户标识或当前会话标识附加到缓存键可以解决此问题。这通常是用于缓存的。 – 2010-09-16 17:02:44
我们谈论的数据源有多大? 10行,100行,1000000行? – CodingGorilla 2010-09-16 15:14:01
不是很大,但我想我的担心是覆盖缓存或session'd对象。 – jlrolin 2010-09-16 15:15:22
我问大小的原因是你可能会考虑将数据放在视图状态,而不是服务器端缓存(除非存在安全问题)。 – CodingGorilla 2010-09-16 17:54:53