i4o开源项目增强LINQ索引功能

当一个LINQ表达式直接访问数据库时,DLINQ Provider支持所有数据库索引。但是LINQ不仅会访问数据库,它还可能访问XML或者更简单的对象集合等。对于稍大些的查询,索引的缺失可能成为一个问题。

\

为了解决这个问题,Aaron Erickson创建了一个名为Index for Objects或者i4o的产品。这个项目是开源的,可以下载下来试用。任何能增加到属性的可索引Attribute都应该被索引。当对象被依次放在IndexableCollection里时,索引就被自动创建。

\

在运行时情况下,当你调用Where和Join等扩展方法时,i4o就开始起作用。它会评估表达式树,如果合适,就用一个索引查找(Index Lookup)替代for-each循环。

\

这个技术目前只在使用大型的内存对象集合的情况下才可用。在测试一个有着100万对象的集合时,i4o将速度提高了差不多两个数量级。

\

作为一个新的项目,它还有很多的问题需要解决。有些比较简单,不久就能被实现,比如增加从集合中删除对象的支持或者支持BindingList等。但有些比较困难,比如在一个已被索引的集合里如何处理对象的更新。对象本身不知道它们在集合中,要给每一个被索引的类增加INotifyPropertyChanged支持是很无聊的,而且看上去用一些面向方面编程(AOP)技术去注入(Inject)必要的事件钩子可能是不可能实现的。

\

在CodePlex网站上此项目提供Binary和源代码格式下载。如果想了解更多关于i4o的信息或者提一些关于性能提高方面的建议,可以浏览Aaron Erickson的博客

\ 查看英文原文: Indexes for LINQ
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值