[OGR/GDAL]Geopackageを試してみた(C#)

QGIS3でデフォルトのデータ形式がシェープファイル(ESRI ShapeFile)からGeopackageに変わりました。シェープファイルには、OGRの(C#というより.Netの)APIからだとデータに全角文字が含まれていると(cpgファイルを書いていても)文字化けしてしまうこと、シェープファイルは1つのデータセットに複数のファイル(最低、shp・shx・dbfの3ファイル)が必要で管理が面倒といった問題点があります。一方でGeopackageの場合には、1つのファイルで完結し文字化けも(今までは)発生しない1)文字化け、多発してましたorzするので、これを機に移行してみたいと思った次第です。
ところが・・・、軽い処理でもなんか重たい。

ということで、正方形を1万個描画する処理に要する時間を、末尾に記載したプログラムで比較してみました。
その結果が、シェープファイル:0.18秒、Geopackage:29.30秒。

圧倒的にGeopackageが遅いという結果になりました(複数回実行して比較するまでもない大差!!)。
Geopackageでの作図処理中に「gpkg-journal」ファイルが出来ていた2)GeopackageはSQLiteのファイルで、SQLiteにて大量にInsertなどの書き込み処理をする場合にトランザクションの開始終了を明示しないと非常に遅くなる。ので、トランザクション処理が抜けているという訳ではなさそうですけど、倍半分どころか100倍以上の差がついてしまいました。
コレではちょっと実用になりません(´・ω・`)
GDAL/OGRのアップデートで改善は見込めるのでしょうか・・・

OGR.DataSourceにトランザクションの開始と終了を明示するメソッドがあるのを思いだして実装しました。具体的にはサンプルコードの51行目でトランザクションを開始して、84行目で終了しています。
すると、Geopackageでの処理時間が大幅に向上して、トランザクションの明示なしだと30秒近かった処理時間が0.22秒へと大幅に短縮しました。
複数回実行してみたところ、シェープファイルよりは少し時間がかかっているようですが、差はわずかですし、他の利点を考えると実用上全く問題のない範囲となりそうです。

ちなみに、当方の環境はこんな感じ。
Windows10(Ver1803、Build17134.286)
GDAL2.3.0(gdal-203-1911-x64-core.msi、2018.10.11時点で2.3.2が最新)
CPU:Core i7-8700、メモリ:16GB

脚注   [ + ]

1. 文字化け、多発してましたorz
2. GeopackageはSQLiteのファイルで、SQLiteにて大量にInsertなどの書き込み処理をする場合にトランザクションの開始終了を明示しないと非常に遅くなる。
コメントの入力は終了しました。