0

カスタム Sqlite3 ラッパーの使用から、Delphi XE3 の System.Sqlite ユニットに切り替えました。

これまでのところ、結果には満足していますが、それでも電話するべきかどうかは 100% 確信が持てません。

...
initialization

  sqlite3_initialize;

finalization

  sqlite3_shutdown;
end.

私のコードで?

本当の質問は

sqlite3.c は、http: //www.sqlite.org/download.html からダウンロードできる Windows 3.7.17 ディストリビューションで定義された SQLITE_OMIT_AUTOINIT でコンパイルされていますか?

4

1 に答える 1

4

公式ドキュメントには次のように記載されています。

SQLITE_OMIT_AUTOINIT

sqlite3_initialize() インターフェイスがない古いバージョンの SQLite との下位互換性のために、sqlite3_initialize() インターフェイスは、sqlite3_open()、sqlite3_vfs_register()、および sqlite3_mprintf() などの特定の主要なインターフェイスへのエントリ時に自動的に呼び出されます。この方法で自動的に sqlite3_initialize() を呼び出すオーバーヘッドは、SQLite_OMIT_AUTOINIT C プリプロセッサ マクロを使用して SQLite を構築することで省略できます。SQLITE_OMIT_AUTOINIT を使用してビルドすると、SQLite は自動的に初期化されず、アプリケーションは SQLite ライブラリの使用を開始する直前に sqlite3_initialize() を呼び出す必要があります。

したがって:

  • デフォルトでは、この条件は定義されていません。
  • が呼び出されていることが確実な場合は、それを定義できます。sqlite3_initialize()
  • sqlite3_initialize()初期化チェックは「特定の主要なインターフェイスへのエントリ時」、つまりDBを開くときに実行されるため、実行するかどうかにかかわらず、パフォーマンスにコストはかかりません。

が呼び出されなくてもすべてが機能するという事実は、sqlite3_initialize()それを明確に示しています。

SQLite3ラッパー (静的リンクまたは外部リンクを許可)では明示的に を呼び出すため、この条件を有効にしますsqlite3_initialize()。しかし、公式の dll では、この条件は定義されていません。

于 2013-05-25T05:15:18.187 に答える