C# 缓存查找性能

C# 缓存查找性能,c#,performance,caching,lookup,C#,Performance,Caching,Lookup,我们有一个大型winforms C应用程序,它基本上是一些数据库CRUD的前端,我正试图为业务对象实现一些内存缓存 比如: List<Customer> customerCache; // Loaded during app. startup 我已经创建了一些代码,使缓存与数据库保持最新。这段代码一直在一个单独的线程上运行,并且运行得非常好。 我的问题是,根据缓存的大小,在数据库中对id=x的客户执行“选择*”操作要比使用customerCache中的foreach foreach

我们有一个大型winforms C应用程序,它基本上是一些数据库CRUD的前端,我正试图为业务对象实现一些内存缓存

比如:

List<Customer> customerCache; // Loaded during app. startup
我已经创建了一些代码,使缓存与数据库保持最新。这段代码一直在一个单独的线程上运行,并且运行得非常好。 我的问题是,根据缓存的大小,在数据库中对id=x的客户执行“选择*”操作要比使用customerCache中的foreach foreach Customer cmr在缓存中循环查找特定对象更快

有没有办法在缓存中快速搜索特定对象?我想尝试一些算法或者改变我收藏的类型,但是我很乐意听你的建议

请注意,我们有几个“列表xxxCache”,对于小N来说,一切都很快。但是当缓存的iTen数量增长到3000以上时,从数据库读取数据的速度通常会更快

通过缓存项循环查找特定项的最佳方法是什么?所有业务项都继承自一个共同的祖先,并具有“ID”属性integer,unique

对不起,我的英语不好,它不是我的主要语言。 顺致敬意, 来自巴西的问候语。

改用字典。它支持基于密钥的O1查找。在这种情况下,密钥将是Customer.Id

您可能还想研究其他针对.Net的预构建数据库缓存解决方案。

除了使用列表对象,为什么不使用:

键值对


Dictionary是正确的使用对象KeyValuePair是字典中包含**facepalm**

的集合。根据需要的索引数量使用尽可能多的字典

dictionary<int,Customer> CustomerIds //(Ids)  
dictionary<string,Customer> CustomerNames //(Names)  
//or  
dictionary<string,List<Customer>> //(if name is not unique)

web表单应用程序也有类似的情况。 我们使用MS企业库缓存块。 它易于实现和使用。 在缓存键字符串类型中,唯一需要关注的是 cache.addkey,对象 cache.getdatakey