C# 在.Net 2.0应用程序中缓存DB表。访问它的最快方式是什么?

C# 在.Net 2.0应用程序中缓存DB表。访问它的最快方式是什么?,c#,.net,database,select,datatable,C#,.net,Database,Select,Datatable,我有一个需要经常访问的静态表。因此,我在运行时缓存它 目前,我使用DataTable存储信息,并使用Select检索信息。筛选通常分布在2或3列上。但这似乎是非常重要的!速度慢,是一个主要的瓶颈 因此:在.NET2.0中缓存DB表的最佳方式是什么?如何以最快的速度访问它 [编辑1] DataTable cache = new DataTable(); cache.Columns.Add("id", typeof(int)); cache.Columns.Add("data_id", typeof

我有一个需要经常访问的静态表。因此,我在运行时缓存它

目前,我使用DataTable存储信息,并使用Select检索信息。筛选通常分布在2或3列上。但这似乎是非常重要的!速度慢,是一个主要的瓶颈

因此:在.NET2.0中缓存DB表的最佳方式是什么?如何以最快的速度访问它

[编辑1]

DataTable cache = new DataTable();
cache.Columns.Add("id", typeof(int));
cache.Columns.Add("data_id", typeof(int));
cache.Columns.Add("data", typeof(string));
cache.Columns.Add("value", typeof(float));
例如:

[编辑2]

考虑到@MichaelPerrenoud的建议,我最终实现了一个字典。请记住,这个设计是关于我需要缓存的DB表的结构

Dictionary<string, Dictionary<NewObject, float>> cache;
class NewObject {int id; int data_id;}
这样,缓存将数据作为[键],将新字典作为[值]。后者的id+数据id作为[key],值作为[value]


在访问数据时,此字典比DataTable快~%90。

因此,我认为这样做对您来说是一个很好的解决方案。我假设您在最初获得数据之后就拥有了DataTable

免责声明:我尚未编译此代码-这是一个概念-您可能需要修复一些语法

然后,为了获取数据,您将构建如下字符串:

string key = "1_2_some data";
dictionary[key];
然后从字典中取出行列表,如下所示:

string key = "1_2_some data";
dictionary[key];
这将返回一个列表供您使用


但是,您只需执行一次,然后反复使用这些词典。

因此,我认为对您来说,一个好的解决方案是这样的。我假设您在最初获得数据之后就拥有了DataTable

免责声明:我尚未编译此代码-这是一个概念-您可能需要修复一些语法

然后,为了获取数据,您将构建如下字符串:

string key = "1_2_some data";
dictionary[key];
然后从字典中取出行列表,如下所示:

string key = "1_2_some data";
dictionary[key];
这将返回一个列表供您使用


但是,,您只需这样做一次,然后反复使用这些字典。

您能说明当前如何实现此数据表/用法吗?请提供筛选器的示例-这是我们了解需求的唯一方法。您能说明当前如何实现此数据表/用法吗?请提供过滤器的示例-这是我们能够理解需求的唯一方法。谢谢您的建议。这很有趣。但是:1表格有几十万行;2如果每个id和数据\u id和数据组合,我将在应用程序的生命周期内访问表一次或两次。@YesAnul,那么根据定义,如果您只访问表一次或两次,则不需要缓存-对数据库运行查询。但你说我需要经常访问,所以我有点困惑。是的,你的定义是正确的。但是,正如我所说,这个表有几十万行。我需要访问其中的50%或70%,每次访问一次或两次,通常是两次。避免撞击DB是必须的,因为速度至关重要。这就是我使用表的内存副本的原因。根据您的建议,我将缓存的数据表示为字典。我选择的解决方案在[edit 2]中。@Yeseanul,太棒了!增长正是我所期望的。这就是编程的全部内容——一个概念——不一定是文字实现。你的问题中可能有我无法推导的东西,但这个概念也起到了同样的作用。谢谢你的建议。这很有趣。但是:1表格有几十万行;2如果每个id和数据\u id和数据组合,我将在应用程序的生命周期内访问表一次或两次。@YesAnul,那么根据定义,如果您只访问表一次或两次,则不需要缓存-对数据库运行查询。但你说我需要经常访问,所以我有点困惑。是的,你的定义是正确的。但是,正如我所说,这个表有几十万行。我需要访问其中的50%或70%,每次访问一次或两次,通常是两次。避免撞击DB是必须的,因为速度至关重要。这就是我使用表的内存副本的原因。根据您的建议,我将缓存的数据表示为字典。我选择的解决方案在[edit 2]中。@Yeseanul,太棒了!增长正是我所期望的。这就是编程的全部内容——一个概念——不一定是文字实现。你的问题中可能有我无法推导的东西,但这个概念同样适用。