写点什么

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:491618

评论 1 条评论

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

29 K8S之ReplicaSet控制器

穿过生命散发芬芳

k8s 11月日更

【死磕Java并发】-----J.U.C之深入分析CAS

chenssy

11月日更 死磕 Java 死磕 Java 并发

Rust 元宇宙 7—— 异步和消息

Miracle

rust 异步 元宇宙

架构营模块五作业

GTiger

如何用JavaScript实现2+2=5?

汪子熙

JavaScript 大前端 语音识别 语音合成 11月日更

Python Qt GUI设计:QClipboard剪贴数据类(基础篇—19)

不脱发的程序猿

Python PyQt GUI设计 QClipboard 剪贴板

Spring AOP内功修炼

4ye

Java spring 程序员 后端 签约计划第二季

spring-boot-devtools 快速重启的秘密

4ye

Java spring 程序员 后端 签约计划第二季

企业决策智能项目的五种失败姿势

脑极体

[Pulsar] 消息的消费

Zike Yang

Apache Pulsar 11月日更

AOP 插件就这?上手不用两分钟!!

4ye

Java spring 程序员 后端 签约计划第二季

微信程序开发系列教程(一)开发环境搭建

汪子熙

JavaScript node.js 微信 11月日更 微信开发

微博系统中”微博评论“的高性能高可用计算架构设计

Beyond Ryan

在线文本并集计算工具

入门小站

工具

面试官:final、finally、finalize 有什么区别?

王磊

java面试

面试官:int和Integer有什么区别?为什么要有包装类?

王磊

激发数字新活力 打造发展新优势

CECBC

元宇宙是人类文明不可避免的一次内卷

CECBC

DDD领域驱动设计落地实践系列:战略设计和战术设计

慕枫技术笔记

Java 后端 签约计划第二季

OpenELB 进入 CNCF Sandbox,让私有化环境对外暴露服务更简单

青云技术社区

云计算 云原生

GitHub上星标39.9k+的开源类库,忍不住分享下

沉默王二

Java

一文读懂敏捷开发的发布策略

华为云开发者联盟

DevOps 运维 敏捷 开发 发布策略

面试官:说一下final关键字和final的4种用法?

王磊

从1天到10分钟的超越,华为云DRS在背后做了这些

华为云开发者联盟

数据库 数据 报表 华为云DRS 在线交易

中国首批区块链订单融资缘何落地雄安?

CECBC

架构训练营 - 模块六

Geek_9de3de

架构实战营

使用JDK自带的VisualVM进行Java程序的性能分析

汪子熙

Java jdk 性能 性能调试 11月日更

使用ES6编写一个超简单的搜索算法

吴脑的键客

JavaScript 大前端

架构训练营 - 模块五

Geek_9de3de

架构实战营

12.04 Serverless Meetup 深圳站 | Call 你来参加

阿里巴巴云原生

阿里云 Serverless 云原生 活动

Python量化数据仓库搭建系列3:数据落库代码封装

恒生LIGHT云社区

量化投资 量化交易 量化

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