最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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

  • 2018-10-30
  • 本文字数:619 字

    阅读完需:约 2 分钟

当一个 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

2018-10-30 16:491133

评论 1 条评论

发布
用户头像
mark
2018-11-08 22:30
回复
没有更多了
发现更多内容

【LeetCode】删除有序数组中的重复项Java题解

Albert

算法 LeetCode 4月日更

有阳光的地方就会有影子

小天同学

公平 个人感悟 社会百态 4月日更

架构实践二

颜培攀

架构实战营

rtsp系列专题(一)之rtsp服务器搭建

txp

音视频 音频技术

微信朋友圈 高性能分析

return

架构实战营模块2作业

白发青年

架构实战营

架构训练营模块二作业

Geek_e0c25c

架构训练营

架构实战营 模块二 总结

Pitt

【架构实战营】第 2模块作业

swordman

架构实战营

模块二作业

梦寐凯旋

朋友圈高性能分析

^_^vincent

Golang interface and error handle

escray

学习 极客时间 Go 语言 4月日更

架构实战营模块二作业

hunk

架构实战营

算法训练营 - 学习笔记 - 第三周

心在飞

我是如何从零开始学Python:(2)如何解决安装和检查Python版本遇到的问题?

广之巅

Python 4月日更

Linux tail 命令

一个大红包

4月日更

架构实战营 - 模块 2- 作业

笑春风

一种特殊的树—堆

Nick

数据结构

SQL 子查询怎么优化?写的很深的这种!

xcbeyond

sql SQL优化 4月日更

架构实战营-M02H

赤色闪电

在JavaScript中使用对象来优化if/else和switch

devpoint

JavaScript 对象 Switch

架构实战营 模块二

Keyto

微信朋友圈架构设计

Vincent

#架构实战营

朋友圈复杂度分析

鲲哥

重读《重构2》- 函数组合成变换

顿晓

重构 4月日更

Mac 新手使用技巧|从 Windows 换到 Mac,真没有想象中的那么难。

彭宏豪95

macos 效率 Mac windows 4月日更

作业 - 分析一下微信朋友圈的高性能复杂度

sN0wpeak

架构实战营

Ansible 安装

耳东@Erdong

ansible 4月日更

【架构实战营】模块2作业

dragonboa

微信朋友圈架构设计

俞嘉彬

#架构实战营

架构实战营 模块二作业

ercjul

架构实战营

i4o开源项目增强LINQ索引功能_.NET_Jonathan Allen_InfoQ精选文章