IQueryable与字典的性能
|
启动时,我正在应用程序中缓存大量静态元数据。它来自数据库,并且有大量的外键关系。我正在研究对其建模的最佳方法。
我刚开始使用LINQ。
我很容易声明一个类
public class AllData {
public static IQueryable<libm_ColPurpose> IQ_libm_ColPurpose = libm_ColPurpose.All();
public static IQueryable<libm_ColType> IQ_libm_ColType = libm_ColType.All();
...
(我正在使用SubSonic 3生成我的类,但这不重要)。
然后,我可以使用IQueryable<T
>成员来访问所需的任何内容,例如:
libm_ColType ct = AllData.IQ_libm_ColType.SingleOrDefault(x => x.ColTypeStr == this.DefaultJetColTypeStr);
在使用IQueryable之前,我使用过字典来存储FK关系,因此为了模仿以上代码,我将从先前存在的List<libm_ColType
>列表中编写以下代码
Dictionary<string, libm_ColType> colTypeByColTypeStr = new Dictionary<string, libm_ColType>();
foreach (libm_ColType x in list) { rtn.Add(x.ColTypeStr, x); }
然后我可以使用
libm_ColType ct = colTypeByColTypeStr[this.DefaultJetColTypeStr];
好的,所以最后我们解决了这个问题!
通过ID进行Dictionary查找非常高效,但是IQueryable解决方案更加灵活和优雅。
我想知道使用IQueryable能获得多少性能提升。我怀疑每次调用列表时都会对列表进行线性扫描,如果涉及到很多记录,那真的会超过重复调用的总和。
如果可以识别唯一值的列并在第一次查找后生成并缓存哈希表,那将是很好的选择,但是我怀疑这将不属于该产品。
对于使用LINQ来说,这对我来说有点麻烦。
请注意(我将再次重复),我不是从数据库中提取数据,它已经在内存中,并且正在那里查询它,所以我只在查找数据库中很有趣-内存IQueryable<T
>。
没有找到相关结果
已邀请:
1 个回复
傻零凰死授