Noah Hart氏がSQLite3をC#に移植した。最初のバージョンはオリジナルと比べると低速ではあるものの、これによりP/Invokeやアンセーフコードなしで.NETのマネージ環境からSQLiteを使うための道が開かれたことになる。
C#-SQLiteプロジェクトはGoogle Codeでホストされていて、SQLite 3.6.16を完全にC#へ移植したと述べられている。コードはCreative Commons 3.0ライセンスで公開されている。C#-SQLiteは30,000以上のテストをパスし、失敗したのはわずかに9個だけだ。コンパイル済みのバイナリexeファイルのサイズは528KBで、オリジナルの506KBとほぼ同じサイズである。パフォーマンスについてはCで実装されているオリジナルには及ばない。しかし、Hart氏の言によれば、まだコードの最適化をしていないし、現時点でもパフォーマンスは許容範囲内だと考えている、とのことだ。下の表は1秒当たりの処理行数を表している。
テスト | C#-SQLite | SQLite |
Insert | 300K | 1300K |
Select | 1500K | 8450K |
Update | 60K | 300K |
Delete | 250K | 700K |
Cory Nelson氏はSQLiteの移植が他のアプローチよりも適している理由について説明している。その説明によれば、P/Invokeはとても遅くて移植に向かないので避けた方がよいのだという。また、もう1つの理由として、Cを使うとコードがごちゃごちゃしてしまい最適化の妨げになる可能性があることを挙げている。
Adobe AIRなどの多くのプロダクトはSQLiteを備えている。C#-SQLiteのベストな利用形態は、Tim Anderson氏が指摘するようにSilverlightで使うことだろう。
分離ストレージに書き込み可能なMicrosoft Silverlight用のローカルデータベースマネージャを望んでいます。
… Silverlightではプラットフォーム呼び出しやアンセーフコードを使えません。P/Invokeは少ないように見受けられますが、オリジナルのSQLiteがポインタを頻繁に使っている個所では、かなりの量のアンセーフコードを使っているのではないかと私は推測しています。
Silverlightは.NET Frameworkとして実装されていますが、System.Data名前空間を備えていません。System.Linqは備えています。
C#-SQLiteはSQLiteの公式版ではなく、Hart氏はSQLite.orgに所属していない。SQLiteの作者でありその商標の商標権者であるRichard Hipp氏はこの移植版の名前に"SQLite"を含めることを認めなかった。しかし、後になってC#-SQLiteという名前を認めたようだ。
マネージドデータベースは他にもいくつか存在しており、例えばPerst、db4o、Silverlight Database、System.Data.SQLiteなどがある。