SQLite 移植到了.NET

  • Abel Avram
  • 王瑜珩

2009 年 8 月 9 日

话题:.NETDevOps语言 & 开发架构

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

.NETDevOps语言 & 开发架构