C# 缓存动态更改的对象列表
我有一个关于如何高效缓存对象列表的问题。我有一个C# 缓存动态更改的对象列表,c#,sql,performance,caching,memcached,C#,Sql,Performance,Caching,Memcached,我有一个关于如何高效缓存对象列表的问题。我有一个Trips的样本表。每次行程都有DateFrom和DateTo。我想缓存Trips的列表 第一种方法是在X分钟获得跳转代码表单数据库和缓存列表>代码>跳转< /Cord>S ValueObjts(由值对象,我指的是在列表中显示行程所需的所有数据)。这种方法非常简单,但有一些缺点: -处理分页-如果我逐页存储它们(例如使用键TripsP1,TripsP2,等等)。当GUI上的页面大小改变时,我将不得不使用不同的键进行一组行程(例如使用键TripsP1
Trip
s的样本表。每次行程
都有DateFrom
和DateTo
。我想缓存Trip
s的列表
第一种方法是在X分钟获得<代码>跳转<代码>代码表单数据库和缓存列表>代码>跳转< /Cord>S ValueObjts(由值对象,我指的是在列表中显示行程所需的所有数据)。这种方法非常简单,但有一些缺点: -处理分页-如果我逐页存储它们(例如使用键
TripsP1
,TripsP2
,等等)。当GUI上的页面大小改变时,我将不得不使用不同的键进行一组行程(例如使用键TripsP1Size1
,TripsP1Size2
等)
-如何处理排序列表?为每个过滤器组合保留一组带有不同键的Trip
s
第二种方法是考虑每个请求的HITTNG数据库,但只从数据库中获取代码>跳转.ID/COD>。接下来,我想从缓存中获取每个
Trip ValueObject
。创建或修改Trip
后,我将把它们放在缓存中,并将TripId
作为键。另外,如果出于某种原因,我在缓存中找不到Trip ValueObject
,我会从数据库中取出它并放入缓存
以下哪种方法更好?或者你可以建议一些更有效的方法?我不明白为什么要以页面的形式进行这些旅行 为什么不将所有行程加载到一个列表中(可以根据您的需要进行排序),并为Linq搜索查询构建内存索引?比如说 根据您的应用程序查询模式,您可以创建缓存的内存索引,以便进行快速搜索 如果您担心在事务进行过程中Trip会发生更改(所有缓存都忽略了这一点),那么应该使用不可变集合实现它(并使Trip为不可变类型) 通过这种方式,当用户要求服务器提供具有特定条件的项时,您可以轻松地选择这些项,并为其提供获取数据流的IQueryable(IEnumarable sequence)方法 希望这有帮助,Ofir