我有一个(静态)表,我需要非常频繁地访问它。因此我在运行时缓存它。
现在我使用 DataTable 来存储信息并使用 Select() 来检索它(过滤通常分布在 2 或 3 列上)。但这似乎非常(!)缓慢并且是主要瓶颈。
因此:缓存数据库表(在 .Net 2.0 中)的最佳方式是什么以及如何以最快的速度访问它?
[编辑 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));
例如:
DataRow[] result1 = cache.Select("id = 1 AND data_id = 2 AND data = 'some data'");
DataRow[] result2 = cache.Select("data = 'some other data'", "data desc");
[编辑 2]
考虑到@MichaelPerrenoud 的建议,我最终实现了一个字典。请记住,这种设计是针对我需要缓存的数据库表的结构。
Dictionary<string, Dictionary<NewObject, float>> cache;
class NewObject {int id; int data_id;}
这样,缓存将数据作为 [key] 并将新字典作为 [value]。后者将id + data-id作为 [key] ,将 value 作为 [ value ] 。
在访问数据时,此 Dictionary比 DataTable 快~%90 。