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