InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

SQLite移植到了.NET

作者 Abel Avram 译者 王瑜珩 发布于 2009年8月9日

领域
运维 & 基础架构,
架构 & 设计,
语言 & 开发
主题
.NET ,
数据访问 ,
数据库 ,
编程 ,
SQLite

Noah Hart将SQLite3移植到了C#上。虽然此次移植版本比原始版本要慢,但是此项目可以让.NET托管项目在不使用任何P/Invoke和不安全代码的情况下使用SQLite。

C#-SQLite被寄放在Google Code上,是从SQLite 3.6.16到C#的完全移植,代码版权使用MIT License。C#-SQLite通过了超过3万个测试用例,只有9个没有通过。编译好的二进制exe文件只有528KB,和原始版本的506KB差不多。性能方面要比原始的C版本差一些,但是Hart说他还没有对代码做任何性能优化,而且他认为目前的性能还可以接受。所有的数据单位都是行/秒:

Test C#-SQLite SQLite
Insert 300K 1300K
Select 1500K 8450K
Update 60K 300K
Delete 250K 700K

Cory Nelson解释了为什么移植SQLite要比其它方式更好:避免P/Invoke带来的“速度超慢和无法移植”问题。而且C代码“充斥着goto语句,会使优化变得十分困难”。

很多产品-如Adobe AIR-都包含和使用了SQLite。或许C#-SQLite最能发挥的地方是Silverlight项目,Tim Anderson指出

可以在微软Silverlight中作为本地数据库使用,保存在isolated storage中。

……Silverlight不允许P/Invoke和不安全代码,由于原始版本的SQLite中使用了大量的指针,即使只有很少的P/Invoke,不安全的代码却一定有很多。

虽然Silverlight是实现在.NET Framework上的,却不包含System.Data命名空间,但包含了System.Linq。

C#-SQLite并不是SQLite的官方版本,Hart也与SQLite.org没有任何关系。SQLite的创造者和商标所有人Richard Hipp,在一开始并不同意将“SQLite”包含在项目名中,但是后来同意使用C#-SQLite。

除了这个项目,还有其它一些托管数据库,比如:Perstdb4oSilverlight DatabaseSystem.Data.SQLite

查看英文原文:SQLite Has Been Ported to .NET

 

译者 王瑜珩 InfoQ中文站编辑,ThoughtWorks咨询师,关注企业级Web开发、敏捷实践以及项目管理。

我还不知道什么是SQL lite? 发表人 Liu Xing 发表于
Noah Hart 自己也说了,这只能说是用C#模拟C版SQLite,而不是移植 发表人 He YuanHui 发表于
  1. 返回顶部

    我还不知道什么是SQL lite?

    发表人 Liu Xing

    我还不知道什么是SQL lite?

  2. 返回顶部

    Noah Hart 自己也说了,这只能说是用C#模拟C版SQLite,而不是移植

    发表人 He YuanHui

    Noah Hart 自己也说了,这只能说是用C#模拟C版SQLite,而不是移植。
    不过这的确是个很不错的项目,包括作者把C转换为C#的方法,和在很多不能使用非托管代码的地方使用C#-SQLite的可能性。